2012-03-07 55 views
6

He estado tratando de buscar una solución, pero con muy poco éxito. Tengo que mostrar una ventana emergente que contiene una lista de elementos. Pude mostrar la ventana pero onitemclicklistener no se ha invocado al hacer clic en un elemento en la vista de lista . Cualquier ayuda con este problema sería muy apreciada.¿Cómo hacer que los elementos se puedan hacer clic en la vista de lista?

Gracias

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

En el código anterior, traté de crear un diseño dentro de la cual he añadido una vista de lista. Esto hace que la vista de lista ya no se pueda hacer clic. Tengo que hacer esto porque, estoy tratando de implementar una ventana emergente dentro de la cual debe haber múltiples elementos junto con una vista de lista.

+1

poner su defecto ListView code.By se puede hacer clic. –

Respuesta

-1

respuesta Editado

Aplicar esta muestra Por favor, esto funciona para usted He probado este Código

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

       } 
      }); 
    } 
} 

// Archivo de manifiesto

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

por favor utilice este Código que tiene su solución

+0

me refiero a mostrar una ventana emergente para una actividad que deberíamos usar android: theme = "@ android: style/Theme.Dialog" en el manifiesto de la actividad correspondiente para que cargue cualquier actividad significa incluso vista de lista en esa ventana emergente – Ramz

+0

OnListItemClick estará disponible para sobrescribir solo cuando extendamos la clase de la actividad de la lista. Pero quería mostrar la lista dentro de una ventana emergente. – user1253887

+0

utilice este código actualizado y probado (código de trabajo) – Ramz

10

es la lista y los elementos de la lista que figura a hacer clic? Ya sea mediante programación ...

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

O en el XML ...

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

supongo que lo hizo, pero a veces nos perdemos incluso el :) obvia

EDIT:

Desde el Android Tutorial aquí se explica cómo configurar un onItemClickListener programáticamente.

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:

Aquí es mi 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> 

Y aquí es mi código

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

       } 

      }); 
    } 
} 
+0

Los elementos de la lista son cadenas, ¿es posible configurar esos elementos en los que se puede hacer clic? Me disculpo si me falta algo aquí. Soy un principiante en Android – user1253887

+0

No deberías tener que ... Aquí está el [tutorial de Android] (http://developer.android.com/resources/tutorials/views/hello-listview.html) si no lo has hecho lo he visto Puede usar setOnItemClickListener para obtener el comportamiento que desea, creo. –

+0

Está en lo cierto, pero esto funciona cuando la pantalla solo contiene la vista de lista. Intente crear una distribución lineal y agregue vista de lista a este diseño lineal. Entonces onitem click listener no funcionará – user1253887

0

Insertar esta propiedad contra cualquier elemento listview

android:onClick="buttonClicked" 

entonces en que el código

public void buttonClicked(View view) 
{ 
    //Do what you want to do.. 
} 
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(); 
     } 
}); 
Cuestiones relacionadas