如何使列表视图中的项目可点击?

Posted

技术标签:

【中文标题】如何使列表视图中的项目可点击?【英文标题】:How to make items clickable in list view? 【发布时间】:2012-03-24 16:43:09 【问题描述】:

我一直在尝试寻找解决方案,但收效甚微。 我必须显示一个包含项目列表的弹出窗口。 我能够显示该窗口,但在单击 列表视图 中的项目时未调用 onitemclicklistener。对此问题的任何帮助将不胜感激。

谢谢

编辑1:

public class PopUpWindowActivity extends Activity 

    /** Called when the activity is first created. */
    String[] countries = new String[] 
        "India", "USA", "Canada"
    ;

    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        LinearLayout ll = new LinearLayout(this);
        ListView lv = new ListView(this);
        lv.setAdapter(new ArrayAdapter < String > (this, android.R.layout.simple_list_item_1, countries));
        lv.setOnItemClickListener(new OnItemClickListener() 

                public void onItemClick(AdapterView <? > arg0, View arg1, int arg2,
                    long arg3) 
                    Log.v("clicked", (String)((TextView) arg1).getText());
                

            );
        ll.addView(lv);
        setContentView(ll);
    

在上面的代码中,我尝试创建一个布局,在其中添加了一个列表视图。这使得列表视图不再可点击。我必须这样做是因为,我正在尝试实现一个弹出窗口,其中应该有多个项目以及一个列表视图。

【问题讨论】:

放上你的代码。默认ListView是可点击的。 【参考方案1】:

列表和列表中的项目是否设置为可点击?以编程方式...

ListView myList = (ListView) findViewById(R.id.list_view_id);
myList.setClickable(true);

或者在 XML 中...

   <ListView xmlns:android="http://schemas.android.com/apk/res/android"
       android:clickable="true">
   ...
   </ListView>

我假设你做到了,但有时我们甚至会错过明显的 :)

编辑:

来自Android Tutorial,这里是如何以编程方式设置 onItemClickListener。

 ListView lv = getListView();
 lv.setOnItemClickListener(new OnItemClickListener() 

   public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
       // When clicked perform some action...
   
 );

编辑 2:

这是我的 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" >

    <ListView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_
        android:layout_
        android:id="@+id/list" />

</LinearLayout>

这是我的代码

 public class HelloAndroidActivity extends Activity 

     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) 
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         String[] countries = getResources().getStringArray(R.array.countries_array);

         ListView lv = (ListView) findViewById(R.id.list);
         lv.setAdapter(new ArrayAdapter < String > (this, R.layout.list_item, countries));
         lv.setOnItemClickListener(new AdapterView.OnItemClickListener() 
                 public void onItemClick(AdapterView <? > arg0, View view, int position, long id) 
                     // When clicked, show a toast with the TextView text
                     Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
                         Toast.LENGTH_SHORT).show();

                 

             );
     
 

【讨论】:

列表中的项目是字符串,是否可以将这些项目设置为可点击。如果在这里遗漏任何东西,我深表歉意。我是android的初学者 你不应该...如果你还没有看到,这里是Android tutorial。我相信你可以使用 setOnItemClickListener 来获得你想要的行为。 你是对的,但是当显示只包含列表视图时,这有效。尝试创建一个线性布局并将列表视图添加到这个线性布局。然后 onitem 点击监听器将不起作用 我创建了一个线性布局并将列表视图放入其中。我使用 onItemClickListener 没有任何问题。我在上面添加了 EDIT 2 以准确显示我所拥有的。 感谢您的回复。我已经添加了我一直在尝试的代码。我没有尝试以 xml 方式实现 gui,但是如果我以编程方式执行它就不起作用【参考方案2】:
ListView myList;
myList = (ListView)findViewById(list_vew_id_in_xml)
myList.setOnItemClickListener(new OnItemClickListener()

@Override
public void onItemClick(AdapterView<?> parent, View  view, int position, long id) 
        
      //Toast.makeText(BritishCouncilActivity.this, "" + position, 2).show();
         
 );

【讨论】:

【参考方案3】:

编辑的答案

请应用此示例,这对您有用我已经测试了此代码

//ListviewActivity.java

 package com.anl.lk;

 public class ListviewActivity extends ListActivity  

     static final String[] COUNTRIES = new String[] 

         "Afghanistan", "Albania", "Algeria", "American Samoa",
             "Andorra", "Angola", "Anguilla", "Antarctica",
             "Antigua and Barbuda", "Argentina", "Armenia", "Aruba",
             "Australia", "Austria", "Azerbaijan", "Bahrain",
             "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize",
             "Benin", "Bermuda", "Bhutan", "Bolivia",
             "Bosnia and Herzegovina", "Botswana", "Bouvet Island",
             "Brazil", "British Indian Ocean Territory"
     ;

     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) 
         super.onCreate(savedInstanceState);
         setListAdapter(new ArrayAdapter < String > (this,
                 android.R.layout.simple_list_item_1, COUNTRIES));
         getListView().setTextFilterEnabled(true);
     

     @Override
     protected void onListItemClick(ListView l, View v, int position, long id) 
         // TODO Auto-generated method stub
         super.onListItemClick(l, v, position, id);

         new AlertDialog.Builder(this)
             .setTitle("Hello")
             .setMessage("from " + getListView().getItemAtPosition(position))
             .setPositiveButton("OK",
             new DialogInterface.OnClickListener() 
                 public void onClick(DialogInterface dialog, int which) 
             )
             .show();

         Toast.makeText(ListviewActivity.this,
             "ListView: " + l.toString() + "\n" +
             "View: " + v.toString() + "\n" +
             "position: " + String.valueOf(position) + "\n" +
             "id: " + String.valueOf(id),
             Toast.LENGTH_LONG).show();
     

 

//首页

package com.anl.lk;

public class FirstPage extends Activity 

    @override
    protected void onCreate(Bundle savedInstanceState) 
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button b = (Button) findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener() 

                public void onClick(View v) 
                    // TODO Auto-generated method stub
                    Intent sam = new Intent(FirstPage.this, ListviewActivity.class);
                    startActivity(sam);

                
            );
    

//清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.anl.lk"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:label="@string/app_name"
        android:name=".FirstPage" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".ListviewActivity"    android:theme="@android:style/Theme.Dialog"></activity>
</application>

请使用此代码,它有您的解决方案

【讨论】:

我的意思是显示一个活动的弹出窗口,我们应该在相应活动的清单中使用 android:theme="@android:style/Theme.Dialog" 以便它加载任何活动意味着甚至该弹出窗口上的列表视图 OnListItemClick 只有在我们扩展 listactivity 类时才能被覆盖。但我想在弹出窗口中显示列表。 请使用此代码更新和测试(工作代码) 是的,我找到了解决方案。 否决了这个。代码没有解释。非常不具建设性。【参考方案4】:

针对任何列表视图项插入此属性

android:onClick="buttonClicked"

然后在你的代码中

public void buttonClicked(View view)

    //Do what you want to do..

【讨论】:

以上是关于如何使列表视图中的项目可点击?的主要内容,如果未能解决你的问题,请参考以下文章

如何使整行列表视图可点击?

如何使可扩展列表视图的项目选中/不可选中

如果可扩展列表视图android中的孩子为空,如何单击组

如何使 NSWindow 中的按钮在工作表上时可点击

如何在 uwp 应用程序中仅使部分 gridview 项目可点击?

如何使表格视图可点击,以便将我带到另一个页面?