Q使用ArrayAdapter for ListView的OnEmClickListener

我想为使用arrayadapter创建的listview创建一个onitemclicklistener

这是我用来创建它的代码:

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

如何实现OnEmClickListener?

谢谢!

编辑:我正在我的ArrayAdapter和ListView中使用一系列对象。

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

    }

编辑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> 
2013-08-23 14:55:49  Ahmed Zafar
  • 您可以为此调用setOnEmClickListner方法。.. – Piyush Aug 23 '13 at 14:28
  • @piyush-你能告诉我怎么做吗?如何创建将其链接到上面给出的arrayadapter的方法? – Ahmed Zafar Aug 23 '13 at 14:29

A回答

  • 1

    使用OnEmClickListener

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

    当您单击一行时,将触发侦听器。因此,在listview上使用setOnClickListener,并使用无注释的内部类OnItemClickListener

    您还覆盖onItemClick。第一个参数是适配器。第二个参数是视图。第三个PARAM是位置(ListVIEW项目的索引)。

    使用您获得物品的位置。

    编辑:从您的评论中,我假设您需要设置适配器O ListVIEW/P>

    所以假设你的活动扩展了ListActivtiy

         setListAdapter(adapter); 
    

    或者如果您的活动类扩展了活动

         ListView lv = (ListView) findViewById(R.id.listview1);
         //initialize adapter 
         lv.setAdapter(adapter); 
    
    2013-08-23 14:38:41  Raghunandan
    • i和y 39;对于该方法如何链接到上面的数组适配器,我感到困惑?我当然可以&39;不只是复制粘贴这个并期望它能工作。我是个新手,请多解释一下。谢谢。 – Ahmed Zafar Aug 23 '13 at 14:33
    • ";/假设字符串,如果您想在单击列表项时获取值,我假设这里是我键入代码的地方,如果单击了某个项,则执行某些操作? – Ahmed Zafar Aug 23 '13 at 14:34
    • @ahmedzafar单击行时,您可以执行您想要执行的操作,而不是获取项目。准确地 – Raghunandan Aug 23 '13 at 14:38
    • 好的。如何将ListVIEW LV与我的数组适配器连接起来?这就是我所困惑的。我是否也会给函数一个输入,或者它是否会自动知道我单击的是什么 – Ahmed Zafar Aug 23 '13 at 14:39
    • 1
      @ahmedzafar不需要链接任何内容。显示更多代码您的活动代码 – Raghunandan Aug 23 '13 at 14:40
    • < StAc级=“注释副本”> @ RangunANAND-完成! – Ahmed Zafar Aug 23 '13 at 14:42
    • @ahmedzafar您的activity类扩展了ListActivityActivity并向我们显示您的xml – Raghunandan Aug 23 '13 at 14:43
    • 它扩展了listactivity。我将用XML更新。 – Ahmed Zafar Aug 23 '13 at 14:54
    • – Ahmed Zafar Aug 23 '13 at 15:01
    • 是,请尝试 – Raghunandan Aug 23 '13 at 15:01
    • < String类=“注释副本”>哇,OK,但是它在String值=(String)适配器.GeTimeTATPATH(PoT)上崩溃了,所以我评论了并放了log。I(“数据库”,“项目点击”);它似乎起作用,但问题是,如何从那个点击中检索数据。它里面有一个号码,我要它打给我。所以问题是我想定制这个,而不是每点击一个项目就发生一件事。谢谢。 – Ahmed Zafar Aug 23 '13 at 15:07
    • @ahmedzafar向我们显示您所说的字符串编号,并发布更新的logcat,无需定制或其他任何操作。 – Raghunandan Aug 23 '13 at 15:09
    • 抱歉,它不是字符串。我不记得说过那句话。logcat非常完美,每当我单击一个项目时,它都会说item clicked。在适配器中存储有带字符串的对象。例如name、contact、day1、from1等。我想检索这些值。 – Ahmed Zafar Aug 23 '13 at 15:11
    • @raghun-holy(@*$u*成功了!非常感谢!我使用了评论注释=(注释)适配器。GeTimeTATPATH(STOP);Log.I(“数据库”,注释.GETNAMEL());向LogCAT打印名称。谢谢!:)这是正确答案。 – Ahmed Zafar Aug 23 '13 at 15:13
  • 2

    您可以这样使用…

    listView.setOnItemClickListener(new OnItemClickListener() {
    
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    final int position, long id) {
    
              String main = listView.getSelectedItem().toString();
            }
        });
    
    2013-08-23 14:30:12  Piyush
    • 1
      我不理解该方法如何知道它链接到上面的arrayadapter? – Ahmed Zafar Aug 23 '13 at 14:30
    • 表示要从适配器获取值?? – Piyush Aug 23 '13 at 14:31
    • 我有显示的列表,存储在ArrayAdapter中。当我单击列表中的某个项目时,我希望它做些什么。具体来说,打个电话。我怎样才能用这种方法做到这一点呢?ListView不是我在代码中指定的,请告诉我这个函数是如何工作的以及我将如何使用它。我很困惑。 – Ahmed Zafar Aug 23 '13 at 14:32
    • 检查我更新的答案。 – Piyush Aug 23 '13 at 14:33
    • 如果您为不同的项目调用不同的东西,那么也可以使用switch case。.. – Piyush Aug 23 '13 at 14:35
    • 非常感谢您的回复,但我仍然感到困惑。对不起的。我声明了一个数组适配器,而不是listview。在使用此方法之前,是否需要执行某些操作以将数组适配器链接到方法中显示的列表视图(&39;) – Ahmed Zafar Aug 23 '13 at 14:35
    • < StaseCype =“注释副本”>让我们< HeRF= =“http://Chist.StObjult.com/室/ 36115 /艾哈迈德ZaFar和piyush gupta之间的讨论”>继续在聊天 Ahmed Zafar Aug 23 '13 at 14:36
    • < StaseCype =“注释副本”>如果您已经输入了XML文件,则找到Raghunandan的ListVIEW OnCurATE()方法ID,您可以使用它。 – Piyush Aug 23 '13 at 14:37
    • 感谢您的帮助! – Ahmed Zafar Aug 23 '13 at 15:16
    • 如果每个项目中有两个文本视图,则如何获取每个文本视图的字符串。我有一个联系人列表,我想得到号码和姓名的值。我该怎么做?@你能帮帮我吗? – LUKER Apr 22 '16 at 13:48
  • 3

    好的,在您的活动扩展了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
    
        }
    
    }
    
    2013-08-23 14:59:22  Heisnberg
    • < StApp=“注释副本”> I和39;我更新了我认为相关的内容! – Ahmed Zafar Aug 23 '13 at 14:43
    • 您的活动是否扩展了listactivity? – Heisnberg Aug 23 '13 at 14:46
    • 是的!我从那里去哪里? – Ahmed Zafar Aug 23 '13 at 14:54
    • 我使用setListAdapter而不是list.setAdapter(--)。我应该两者都用吗? – Ahmed Zafar Aug 23 '13 at 14:59
    • @ toDDX -非常感谢。我需要为此创建一个新类?如果我这样做,我仍然没有得到这个类如何链接到我原来的ListVIEW?请澄清这一点。感谢您的帮助。 – Ahmed Zafar Aug 23 '13 at 15:03
    • < StAc级=“注释副本”>谢谢您的帮助托德! – Ahmed Zafar Aug 23 '13 at 15:17
    • 没有问题@ahmedzafar:-) – Heisnberg Aug 23 '13 at 15:18
  • 4

    我正在使用arrayadpter,使用下面的代码我可以获取项目

    字符串值=(String)适配器

    listView.setOnItemClickListener(new OnItemClickListener() {
    
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                 String string=adapter.getItem(position);
                 Log.d("**********", string);
    
            }
        });
    
    2015-06-05 11:51:00  Issac Balaji