web-dev-qa-db-fra.com

OnItemClickListener utilisant ArrayAdapter pour ListView

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> 
21
Ahmed Zafar

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); 
62
Raghunandan

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();
        }
    });
6
Piyush

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

    }

}
2
Heisnberg

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);

        }
    });
1
Issac Balaji