Как сделать элементы кликабельными в виде списка?

Я пытался искать решение, но с очень небольшим успехом. Я должен показать всплывающие окна содержит список элементов. Я смог отобразить окно, но onitemclicklistener не вызывается при нажатии пункта в посмотреть список. Любая помощь в этом вопросе была бы весьма признательна.

спасибо

Edit1:

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

в приведенном выше коде я попытался создать макет внутри который я добавил представление списка. Это делает представление списка больше не кликабельным. Я должен это сделать, потому что я пытаюсь реализовать всплывающее окно, внутри которого должно быть несколько элементов вместе со списком.

4 ответов


Редактировать Ответ

применить этот образец пожалуйста, это работает для вас я протестировал этот код

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

 }

//FirstPage

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>

пожалуйста, используйте этот код, у него есть ваше решение


установлен ли список и элементы в списке на clickable? Либо программно...

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>

Я предполагаю, что вы сделали это, но иногда мы пропускаем даже очевидное:)

EDIT:

С Android Учебник вот как установить onItemClickListener программно.

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

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

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

                 }

             });
     }
 }

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

вставьте это свойство против любого элемента listview

android:onClick="buttonClicked"

затем в код

public void buttonClicked(View view)
{
    //Do what you want to do..
}