简体   繁体   English

使用ArrayAdapter for ListView的OnItemClickListener

[英]OnItemClickListener using ArrayAdapter for ListView

I want to have an OnItemClickListener for a ListView I create using an ArrayAdapter 我想为我使用ArrayAdapter创建的ListView创建一个OnItemClickListener

This is the code I use to create it: 这是我用来创建它的代码:

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

How do I implement onItemClickListener? 我如何实现onItemClickListener?

Thanks! 谢谢!

EDIT: I am using in my ArrayAdapter and ListView a string of objects. 编辑:我在我的ArrayAdapter和ListView中使用一串对象。

EDIT 2: More code: 编辑2:更多代码:

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: 编辑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> 

Use OnItemClickListener 使用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
      }
   });

When you click on a row a listener is fired. 当您单击某一行时,将触发一个侦听器。 So you setOnClickListener on the listview and use the annonymous inner class OnItemClickListener . 所以,你setOnClickListener的ListView和使用annonymous内部类OnItemClickListener

You also override onItemClick . 您还会覆盖onItemClick The first param is a adapter. 第一个参数是适配器。 Second param is the view. 第二个参数就是观点。 third param is the position ( index of listview items). 第三个参数是位置(listview项的索引)。

Using the position you get the item . 使用该位置即可获得该项目。

Edit : From your comments i assume you need to set the adapter o listview 编辑:从您的评论我假设您需要设置适配器列表视图

So assuming your activity extends ListActivtiy 因此,假设您的活动扩展了ListActivtiy

     setListAdapter(adapter); 

Or if your activity class extends Activity 或者,如果您的活动类扩展了Activity

     ListView lv = (ListView) findViewById(R.id.listview1);
     //initialize adapter 
     lv.setAdapter(adapter); 

you can use this way... 你可以用这种方式......

listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                final int position, long id) {

          String main = listView.getSelectedItem().toString();
        }
    });

Ok, after the information that your Activity extends ListActivity here's a way to implement OnItemClickListener: 好的,在您的Activity扩展ListActivity的信息之后,这是一种实现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

    }

}

i'm using arrayadpter ,using this follwed code i'm able to get items 我正在使用arrayadpter,使用这个follwed代码,我能够得到项目

String value = (String)adapter.getItemAtPosition(position); String value =(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);

        }
    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM