setOnItemClickListener not updating with notifyDataSetChanged - android

I'm using notifyDataSetChanged with my custom GridViewAdapter which updates the listView however when I click on something with my updated listView, the old links are still there. I have the following ClickListener in my onCreate method.
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent intent = new Intent(getBaseContext(), SpiceList.class);
intent.putExtra("INGREDIENTS_CALL", true);
intent.putExtra("INGREDIENTS_SELECTED", position + 1);
if (recipeCall) {
intent.putExtra("RECIPE_CALL", true);
}
startActivity(intent);
}
});
I've tried duplicating this inside the buttons that update the listView but this does not work. Any ideas for how I can best update my listener to reflect my changed listView?
Thanks! :)

Not sure if i understand your question but let me see if i can try. You are changing the listviews views when you click on one?
Are you deleting any element in the array or List you are using for your adapter? So you remove an item and then call notifyDataSetChange()? or you add an item to the array and call the notify method?

Turns out the problem was in the way I was retrieving my SQL queries. I was making the position of my listener equal to the ID of the SQL entry I was retrieving. Therefore, even though my list changed, item 1 was still pulling SQL items with an ID of 1.
When I designed my queries in Android, I originally did not expect that I would run into this problem. However, now I've linked my SQL queries to the actual item ID and not the listener position. My new listener is now:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent intent = new Intent(getBaseContext(), SpiceList.class);
intent.putExtra("INGREDIENTS_CALL", true);
intent.putExtra("INGREDIENTS_SELECTED", Integer.parseInt(resultsID.get(position)));
if (recipeCall) {
intent.putExtra("RECIPE_CALL", true);
}
startActivity(intent);
}
});
Thanks for your help!

Related

setOnItemclicklistner for simplelistitem1 or simplelistitem2

I am using android built in layout android.R.layout.simple_list_item 2. I wanted to perform onItemclicklistner() for the items in this layout. I couldn't find the resource id for this layout without which I couldn't find a way to perform the listner function. The examples I have seen so far is
ListView list = (ListView) findViewById(R.id.mylist); // Since I am using built in layout I couldn't figure out the resourse id as in this case.
list.setOnItemClicklistner();
So my problem is without knowing the resourse id of the built in layout "simple_list_item 2" how can I create a Listview object. and without having a ListView Object I am unable to access setOnItemClickListner(). Hope I delivered the question in a meaningful way. Thanks
Use setOnItemClickListener() instead of setOnClickListener()
If you want to perform clicks on items in the ListView, try using OnItemClickListener in place of OnClickListener. The OnItemClickListener can be set on the ListView as shown below.
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
// Perform the required tasks here
}
});
for list item click u should set onItemClickListener like below
listview.setOnItemClickListener(new OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> a, View v, int position,
long id) {
}
});
also you can set onItemClickListener Interface to your Activity and override method in activity
use setonItemClickListner();
listview.setOnItemClickListner(new OnItemClick(){});

Android GridView Item Click Event Handler Inside ExpandableListView

I have an Android GridView inside an ExpandableListView. All data is appearing fine but I can not find a way to handle GridView Item Click event. I just want to open up another Intent upon clicking on a grid's cell and pass a value to the intent.
Is it possible?
Thanks.
YourGrid.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
Intent intent = new Intent(this,
MyNewActivity.class);
startActivity(intent);
}
});
Make sure in your GridLayout there is no clickable content like buttons otherwise they'll fired instead of this
grid.setOnChildClickListener();
may solve your problem!

Working with LazyList by Fedor onitemclick implementation

I will sound stupid to most of you by asking this, but I haven't been able to figure it out on my own and can't pass to my next task until I found an answer.
So far I have downloaded the LazyList project from https://github.com/thest1/LazyList made by Fedor, I'm trying to understand how it works so I can implement it on my own project. My problem is that I don't know where to implement the onitemclicklistener part:
AdapterView.OnItemClickListener onitemClick = new AdapterView.OnItemClickListener()public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
noteId= //the item id from the list
Toast.makeText(getApplicationContext(), noteId, 2000).show();
}
I have try to add it on my mainActivity but then I can't find how to connect to my LazyAdapter to find the item id to be displayed in a toast. My project will contain some other information in the list (as a table several columns) so I want to be able to access an specific columns from that rows using the item id. and testing with a simple toast will help.
Thanks, I hope you don't laugh to much and help me a little.
I think you are going about it in the wrong manner: AdapterView.OnItemClickListener is an interface and the onItemClick() method takes four parameters... I assume this is what you are trying to do:
ListView listView = (ListView) findViewById(R.id.list);
listView.setOnItemClickListener(new OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getApplicationContext(), id + "", 2000).show();
}
});

How can you tell which item is clicked on ListView?

I have a bunch of items on my ListView, but I don't know how to implement a listener on a specific item. I also tried to use the if statement and still didn't work.
I tried this code:
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int position,long id)
{
if(list.getItemAtPosition(position).equals(mStrings[0]))
{
Intent i = new Intent(MainActivity.this, Activity2.class);
startActivity(i);
}
}
});
}
But this code is applied to all items.
just put
setListAdapter(new ArrayAdapter(this,android.R.layout.simple_list_item_1,String[] to display as List));
then you can came to know which item is clicked.....
arg1 is the View that was clicked inside of your ListView. position is the index of that item in your ListView. If you passed an ArrayList of Strings into your ListAdapter, you would call stringArray.get(position) to get the item that was clicked.
I was facing a similar situation after adding this android:descendantFocusability="blocksDescendants"
to my list view xml i was able to get my on click listener work properly

android list view clickable problem

i have this customized list. each row contains an image and two lines of text one below the other. i want to open a new activity when any list item is clicked. but i am not able to do so, even after implementing the setOnItemClickListener(). please correct me if i am wrong. the below is the code for the list.
PS: This is an normal activity and not list activity.
l1.setAdapter(new EfficientAdapter(this,eventTitleArray,eventDateArray,eventImageLinkArray));
//l1 = getListView();
l1.setClickable(true);
l1.setOnItemClickListener(new OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
Intent intent = new Intent(MainActivity.this, DisplayActivity.class);
Bundle b = new Bundle();
b.putString("event", eventTitleArray[position]);
intent.putExtras(bundle);
startActivity(intent);
Toast.makeText(getApplicationContext(), "Opening detailed view for:"+eventTitleArray[position], Toast.LENGTH_SHORT).show();
}
});
Please have a look whether the row layout has any items which are focusable. If an ListView Item contains focusable children, the Listview Handler will not be fired.
I think there is a bug in the SDK that prevents the onItemClickListeners from firing when there are focusable views in the View of your items.
So you should try to do a setFocusable(false) on all the Views of your items.
The problem is described here

Categories

Resources