Android 如何使项目在列表视图中可单击?

Android 如何使项目在列表视图中可单击?,android,listview,popupwindow,clickable,onitemclicklistener,Android,Listview,Popupwindow,Clickable,Onitemclicklistener,我一直在努力寻找解决办法,但收效甚微。 我必须显示一个包含项目列表的弹出窗口。 我能够显示该窗口,但单击列表视图中的某个项目时,未调用onitemclicklistener。在此问题上的任何帮助都将不胜感激 谢谢 编辑1: public class PopUpWindowActivity extends Activity { /** Called when the activity is first created. */ String[] countries = new St

我一直在努力寻找解决办法,但收效甚微。 我必须显示一个包含项目列表的弹出窗口。 我能够显示该窗口,但单击列表视图中的某个项目时,未调用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);
    }
}
公共类PopUpWindowActivity扩展活动{
/**在首次创建活动时调用*/
字符串[]国家/地区=新字符串[]{
“印度”、“美国”、“加拿大”
};
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
LinearLayout ll=新的LinearLayout(本);
ListView lv=新的ListView(本);
lv.setAdapter(新的ArrayAdapter(这是android.R.layout.simple_list_item_1,国家/地区);
lv.setOnItemClickListener(新的OnItemClickListener(){
公共点击(AdapterView编辑答案

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

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

 }
//清单文件

<?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>


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

是否将列表和列表中的项目设置为可单击?或者以编程方式

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>

...
我想是你干的,但有时我们甚至会忽略显而易见的:)

编辑:

下面是如何以编程方式设置侦听器

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

   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
       // When clicked perform some action...
   }
 });
ListView lv=getListView();
lv.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//单击执行某些操作时。。。
}
});
编辑2:

这是我的XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        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();

                 }

             });
     }
 }
公共类HelloAndroidActivity扩展活动{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String[]countries=getResources().getStringArray(R.array.countries\u数组);
ListView lv=(ListView)findViewById(R.id.list);
lv.setAdapter(新的ArrayAdapter(此,R.layout.list_项,国家/地区));
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){

public void onItemClick(AdapterView针对任何listview项插入此属性

android:onClick="buttonClicked"
然后在你的代码里

public void buttonClicked(View view)
{
    //Do what you want to do..
}
ListView-myList;
myList=(ListView)findViewById(xml中的列表视图id)
myList.setOnItemClickListener(新的OnItemClickListener()
{
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id)
{
//Toast.makeText(BritishCouncilActivity.this,“+位置,2.show();
}
});

我的意思是,为了显示活动的弹出窗口,我们应该使用android:theme=“@android:style/theme.Dialog”在对应活动的清单中,这样它将加载任何活动意味着即使是该弹出窗口上的listview onListItemClick也将仅在扩展listactivity类时可用以覆盖。但我想在弹出窗口中显示列表。请使用更新和测试的此代码(工作代码)是的,我能够得到解决方案。对此投了否决票。没有对代码的解释。非常非建设性。列表中的项目是字符串,是否可以将这些项目设置为可单击。如果我在这里遗漏了任何内容,我深表歉意。我是Androidy的初学者,您不必…如果您没有看到它,这里是示例。您可以使用setOnItemClickListener获取我相信这是您想要的行为。您是正确的,但当显示仅包含listview时,这会起作用。尝试创建一个linearlayout并将listview添加到此线性布局。然后,我创建了一个linearlayout并将listview放入其中。我使用onItemClickListener没有问题。我已将上面的编辑2添加到sh中这就是我所拥有的。谢谢你的回复。我已经添加了我一直在尝试的代码。我还没有尝试以xml方式实现gui,但是如果我以编程的方式实现gui,它就不起作用了。默认情况下,ListView是可点击的。
public void buttonClicked(View view)
{
    //Do what you want to do..
}
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();
         }
 });