Je veux avoir un OnItemClickListener pour un ListView que je crée en utilisant un ArrayAdapter
C'est le code que j'utilise pour le créer:
List<Comment> values = datasource.some_search("Wednesday","11");
ArrayAdapter<Comment> adapter = new ArrayAdapter<Comment>(this,
Android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
Comment implémenter onItemClickListener?
Merci!
EDIT: J'utilise dans mes ArrayAdapter et ListView une chaîne d'objets.
EDIT 2: Plus de code:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
datasource = new CommentsDataSource(this);
datasource.open();
//check if database is populated if NOT, populate with txtToDb();
if (!datasource.isPopulated()) {
// Database is not populated so copy it from assets here
try {
txtToDb();
Log.i("Database", "Was not Populated");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.i("Database", "Was not populated: txtToDb(); failed");
}
} else {
Log.i("Database", "Populated");
}
//wat to show on screen:
List<Comment> values = datasource.search("Wednesday","11");
// Use the SimpleCursorAdapter to show the
// elements in a ListView
ArrayAdapter<Comment> adapter = new ArrayAdapter<Comment>(this,
Android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
}
EDIT 3: XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical" >
<LinearLayout
Android:id="@+id/group"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" >
<Button
Android:id="@+id/add"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Add New"
Android:onClick="onClick"/>
<Button
Android:id="@+id/delete"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Delete First"
Android:onClick="onClick"/>
</LinearLayout>
<ListView
Android:id="@Android:id/list"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="@string/hello" />
</LinearLayout>
Utiliser OnItemClickListener
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> adapter, View v, int position,
long arg3)
{
String value = (String)adapter.getItemAtPosition(position);
// assuming string and if you want to get the value on click of list item
// do what you intend to do on click of listview row
}
});
Lorsque vous cliquez sur une ligne, un écouteur est déclenché. Donc, vous setOnClickListener
dans la vue liste et utilisez la classe interne annymous OnItemClickListener
.
Vous écrasez également onItemClick
. Le premier paramètre est un adaptateur. Le deuxième paramètre est la vue. le troisième paramètre est la position (index des éléments listview).
En utilisant la position, vous obtenez l'article.
Edit: De vos commentaires, je suppose que vous devez définir l'adaptateur o listview
Donc, en supposant que votre activité se prolonge ListActivtiy
setListAdapter(adapter);
Ou si votre classe d'activité est étendue à l'activité
ListView lv = (ListView) findViewById(R.id.listview1);
//initialize adapter
lv.setAdapter(adapter);
vous pouvez utiliser cette façon ...
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
final int position, long id) {
String main = listView.getSelectedItem().toString();
}
});
Ok, après l’extension de votre activité par ListActivity, voici un moyen de mettre en oeuvre OnItemClickListener:
public class newListView extends ListView {
public newListView(Context context) {
super(context);
}
@Override
public void setOnItemClickListener(
Android.widget.AdapterView.OnItemClickListener listener) {
super.setOnItemClickListener(listener);
//do something when item is clicked
}
}
j'utilise arrayadapter, en utilisant ce code suivi, je peux obtenir des éléments
Valeur de la chaîne = (String) adapter.getItemAtPosition (position);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String string=adapter.getItem(position);
Log.d("**********", string);
}
});