OnItemClickListener 为 ListView 使用 ArrayAdapter

Posted

技术标签:

【中文标题】OnItemClickListener 为 ListView 使用 ArrayAdapter【英文标题】:OnItemClickListener using ArrayAdapter for ListView 【发布时间】:2013-08-26 15:37:13 【问题描述】:

我想为使用 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);

如何实现 onItemClickListener?

谢谢!

编辑:我在 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_
    android:layout_
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/group"
        android:layout_
        android:layout_ >

        <Button
            android:id="@+id/add"
            android:layout_
            android:layout_
            android:text="Add New" 
            android:onClick="onClick"/>

        <Button
            android:id="@+id/delete"
            android:layout_
            android:layout_
            android:text="Delete First" 
            android:onClick="onClick"/>

    </LinearLayout>

    <ListView
        android:id="@android:id/list"
        android:layout_
        android:layout_
        android:text="@string/hello" />

</LinearLayout> 

【问题讨论】:

您可以为此调用 setonItemClickListner 方法.. @piyush- 你能告诉我怎么做吗?如何创建将其与上面给出的 ArrayAdapter 链接的方法? 【参考方案1】:

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

当您单击一行时,会触发一个侦听器。所以你在列表视图上setOnClickListener 并使用匿名内部类OnItemClickListener

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

使用你获得物品的位置。

编辑:从您的 cmets 我假设您需要设置适配器 o listview

所以假设你的活动扩展ListActivtiy

     setListAdapter(adapter); 

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

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

【讨论】:

我很困惑这个方法是如何链接到上面的数组适配器的?当然,我不能只是复制粘贴它并期望它起作用。我是一个相对新手,所以请多解释一点。谢谢。 "// 假设字符串,如果您想在单击列表项时获取值" 我假设这里是我键入在单击项时执行某些操作的代码的地方? @AhmedZafar 您可以做您想做的事情,而不是在单击该行时获取该项目。正是 好的。以及如何将 ListView lv 与我的数组适配器链接?这就是让我困惑的地方。我也会给这个函数一个输入还是它会自动知道我在点击什么 @AhmedZafar 不需要链接任何东西。向我们展示您的活动代码的更多代码【参考方案2】:

你可以这样用……

listView.setOnItemClickListener(new OnItemClickListener() 

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

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

【讨论】:

我不明白这个方法怎么知道它链接到上面的ArrayAdapter? 表示你想从适配器中获取价值?? 我有显示的列表,存储在 ArrayAdapter 中。当我单击列表中的某个项目时,我希望它执行某些操作。打个电话,具体点。我怎样才能使用这种方法才能做到这一点? listView 不是我在代码中指定的内容,您能否告诉我更多有关此功能的工作原理以及我将如何使用它的信息。我很困惑。 如果你为不同的项目调用不同的东西,那么也使用 switch case.. 非常感谢您的回复,但我仍然感到困惑。对不起。我声明了一个数组适配器,而不是 listView。在此方法之前我是否需要做一些事情以将数组适配器链接到您在方法中显示的“listView”?【参考方案3】:

好的,在您的 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

    


【讨论】:

您的 Activity 是否扩展了 ListActivity? 是的!我从那里去哪里? 我使用 setListAdapter 而不是 list.setAdapter(--)。我应该同时使用两者吗? @toddx- 非常感谢。我需要为此创建一个新课程吗?如果我这样做了,我仍然不明白这个类如何与我的原始列表视图链接?请澄清这一点。并感谢所有帮助。 感谢托德的帮助!【参考方案4】:

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

字符串值 = (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);

        
    );

【讨论】:

以上是关于OnItemClickListener 为 ListView 使用 ArrayAdapter的主要内容,如果未能解决你的问题,请参考以下文章

使用OnItemClickListener将Listview Fragment分段为事务

onItemClickListener 在自定义 ListView 的其他行上实现

Android OnItemClickListener 和 OnClickListener [重复]

当适配器包含带有 onClickListener 的按钮时,OnItemClickListener 无法正常工作

片段内的 RecyclerView 的 Kotlin OnItemClickListener

选择 json 对象时 ListView OnItemClickListener 崩溃