How to implement OnClickListener on a ListAdapter? My data is coming from sqlite. I want to show half of the data in the first activity and the reamining in the second activty using OnClickListener in ListAdapter.
You need to implement the AdapterView.OnItemClickListener interface and call setOnItemClickListener(AdapterView.OnItemClickListener) on your ListView.
If you're using ListFragment oder ListActivity, you could also override their onListItemClick(ListView lv, View v, int position, long id) method instead.
You should use set ItemClickListener on ListView with help of "setOnItemClickListener".
If you want to catch clicks in adapter, it will be better to use RecyclerView.
Example - https://stackoverflow.com/a/24933117/2687734
What about:
.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
adapter.get(position); //get your custom model
}
});
Related
I have a list view made using custom Adapter & contains 2 text view in each row,
I want to update data of rows , when I long pressed on row.
Just update your model object according to the need and call notifyDataSetChanged() inOnLongClickListener or OnItemLongClickListener of ListView. List data will update.
Go to your custom adapter, and set an OnLongClickListener on the view you return in getView(). In the OnLongClickListener update the array or list you are using and when finished, call notifyDataSetChanged() on the ListView.
Try this:
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
#Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int pos, long id) {
adapter.notifyDataSetChanged();
return true;
}
});
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(){});
In my project I use a custom adapter to define the items of a ListView. So I want to define special behavior of item in ListView, which will be depend on the value of the field in adapter. Like this :
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
}
So, here, in this method I want to get access to the element of adapter to get the value from it, number of which is defined by the int position. So, what is code to do this?
you can simply cast it if you're confident enough it is always your adapter that is used:
protected void onListItemClick(ListView l, View v, int position, long id) {
((MyAdapter) l.getAdapter()).myMethod(position);
}
If you are defining an custom adapter you can save a reference to the adapter in the activity that registers the onClick behaviour. You now can call getItem on the Adapter, if you have implemented the getItem method properly.
You can get selected item(object) from list. Lets say your custom adapter containing Restaurent object per row, and your listView name foodJntListView, then
Restaurent rest= (Restaurent) foodJntListView.getSelectedItem();
will give you the selected item(object).
in my Android app I have created a ListView component called myList, and filled it with objects of my own custom type:
class MyClass{
private String displayName;
private String theValue;
... //here constructor, getters, setters and toString() are implemented
}
I used the ArrayAdapter to bound the ArrayList theObjects with myList:
ArrayAdapter<MyClass> adapter=
new ArrayAdapter<MyClass>(this, R.layout.lay_item, theObjects);
myList.setAdapter(adapter);
This works fine, the list is populated and etc., but when I'm trying to access the selected item, i receive a Null object. I've done this using
myList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> adapter, View v, int position, long id) {
MyClass selItem = (MyClass) myList.getSelectedItem(); //
String value= selItem.getTheValue(); //getter method
}
What seems to be the problem? Thank you
By default, when you click on a ListView item it doesn't change its state to "selected". So, when the event fires and you do:
myList.getSelectedItem();
The method doesn't have anything to return. What you have to do is to use the position and obtain the underlying object by doing:
myList.getItemAtPosition(position);
You are implementing the Click Handler rather than Select Handler. A List by default doesn't suppose to have selection.
What you should change, in your above example, is to
public void onItemClick(AdapterView<?> adapter, View v, int position, long id) {
MyClass item = (MyClass) adapter.getItem(position);
}
Since the onItemClickLitener() will itself provide you the index of the selected item, you can simply do a getItemAtPosition(i).toString(). The code snippet is given below :-
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String s = listView.getItemAtPosition(i).toString();
Toast.makeText(activity.getApplicationContext(), s, Toast.LENGTH_LONG).show();
adapter.dismiss(); // If you want to close the adapter
}
});
On the method above, the i parameter actually gives you the position of the selected item.
On onItemClick :
String text = parent.getItemAtPosition(position).toString();
myList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> adapter, View v, int position, long id) {
MyClass selItem = (MyClass) adapter.getItem(position);
}
}
Using setOnItemClickListener is the correct answer, but if you have a keyboard you can change selection even with arrows (no click is performed), so, you need to implement also setOnItemSelectedListener :
myListView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
#Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
MyObject tmp=(MyObject) adapterView.getItemAtPosition(position);
}
#Override
public void onNothingSelected(AdapterView<?> adapterView) {
// your stuff
}
});
In touch mode, there is no focus and no selection. Your UI should use a different type of widget, such as radio buttons, for selection.
The documentation on ListView about this is terrible, just one obscure mention on setSelection.
Though I am using kotlin, the following code answered your question. This return selected item:
val item = myListView.adapter.getItem(i).toString()
The following is the whole selecteditem Listener
myListView.setOnItemClickListener(object : OnItemClickListener {
override fun onItemClick(parent: AdapterView<*>, view: View, i: Int,
id: Long) {
val item = myListView.adapter.getItem(i).toString()
}
})
The code returns the item clicked by its index i as shown in the code
MyClass selItem = (MyClass)
myList.getSelectedItem(); //
You never instantiated your class.
I have an auto-complete drop down list, I want to make some action when I click on one item in the list.. is there any listener or event handler to to this ??
use this, this will provide you method called setOnItemClickListener().
private AdapterView.OnItemClickListener searchItemClicked = new AdapterView.OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
//your code here
}
}
It's important to note that OnItemSelectedListener does not activate when a user selects a dropdown.