[英]setOnItemClickListener doesn't work
我有一個帶有適配器的列表視圖,但是當我單擊該列表視圖時,我沒有任何響應。 我已經嘗試了其他帖子的一些響應,例如setOnItemClickListener在自定義Listview中 不起作用或Android-ListView的setOnItemClickListener事件在Fragment中不起作用,但是我無法解決問題。 我給你看我的代碼。
一,mainActivity
public class MyListActivity extends ListActivity {
private MainView view;
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Bundle b=this.getIntent().getExtras();
String[] array=b.getStringArray("listaEventos");
/**A continuación, generamos los distintos valores que ocuparán el LinearLayout, concretamente
* las categorías de los eventos.
*/
String[] values = new String[] { "Actividades vacacionales", "Aire libre y excursiones", "Cine",
"Conferencias y otros", "Congresos y jornadas", "Cursos y talleres", "Deporte", "Escénicas",
"Exposiciones", "Ferias", "Fiestas y festivales", "Música", "Viajes", "Otras" };
/**
* Llamamos al adapter personalizado para mostrar la vista.
*/
MyListCategoryArrayAdapter adapter = new MyListCategoryArrayAdapter(this, values, array);
setListAdapter(adapter);
//Log.d("YA SE HA ADAPTADO", "YA SE HA ADAPTADO");
view = (MainView)View.inflate(this, R.layout.all_products, null);
//view.setViewListener(viewListener);
setContentView(view);
}
然后,adapterActivity:
public class MyListCategoryArrayAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;
private final String[] listanumber2;
public MyListCategoryArrayAdapter(Context context, String[] values, String[] listanumber) {
super(context, R.layout.rowlayout, values);
this.context = context;
this.values = values;
this.listanumber2 = listanumber;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView==null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.rowlayout, parent, false);
}
ImageView imageView = (ImageView) convertView.findViewById(R.id.icon);
TextView textView = (TextView) convertView.findViewById(R.id.label);
TextView textView2 = (TextView) convertView.findViewById(R.id.number);
textView.setText(values[position]);
String categoria = values[position];
if (categoria.startsWith("Actividades vacacionales")) {
imageView.setImageResource(R.drawable.pic_vacaciones);
textView2.setText(listanumber2[0].trim()+" eventos");
}
if (categoria.startsWith("Aire libre y excursiones")) {
imageView.setImageResource(R.drawable.pic_aire_libre_excursiones);
textView2.setText(listanumber2[1].trim()+" eventos");
}
if (categoria.startsWith("Cine")) {
imageView.setImageResource(R.drawable.pic_cine);
textView2.setText(listanumber2[2].trim()+" eventos");
}
if (categoria.startsWith("Conferencias y otros")) {
imageView.setImageResource(R.drawable.pic_conferencias);
textView2.setText(listanumber2[3].trim()+" eventos");
}
if (categoria.startsWith("Congresos y jornadas")) {
imageView.setImageResource(R.drawable.pic_congresos_jornadas);
textView2.setText(listanumber2[4].trim()+" eventos");
}
if (categoria.startsWith("Cursos y talleres")) {
imageView.setImageResource(R.drawable.pic_curso_taller);
textView2.setText(listanumber2[5].trim()+" eventos");
}
if (categoria.startsWith("Deporte")) {
imageView.setImageResource(R.drawable.pic_deporte);
textView2.setText(listanumber2[6].trim()+" eventos");
}
if (categoria.startsWith("Escénicas")) {
imageView.setImageResource(R.drawable.pic_escenicas);
textView2.setText(listanumber2[7].trim()+" eventos");
}
if (categoria.startsWith("Exposiciones")) {
imageView.setImageResource(R.drawable.pic_exposiciones);
textView2.setText(listanumber2[8].trim()+" eventos");
}
if (categoria.startsWith("Ferias")) {
imageView.setImageResource(R.drawable.pic_ferias);
textView2.setText(listanumber2[9].trim()+" eventos");
}
if (categoria.startsWith("Fiestas y festivales")) {
imageView.setImageResource(R.drawable.pic_fiesta_festival);
textView2.setText(listanumber2[10].trim()+" eventos");
}
if (categoria.startsWith("Música")) {
imageView.setImageResource(R.drawable.pic_musica);
textView2.setText(listanumber2[11].trim()+" eventos");
}
if (categoria.startsWith("Viajes")) {
imageView.setImageResource(R.drawable.pic_viajes);
textView2.setText(listanumber2[12].trim()+" eventos");
}
if (categoria.startsWith("Otras")) {
imageView.setImageResource(R.drawable.pic_otros);
textView2.setText(listanumber2[13].trim()+" eventos");
}
return convertView;
}
然后,我用來捕獲用戶交互的視圖:
/**
* Find our references to the objects in the xml layout
*/
@Override
protected void onFinishInflate() {
super.onFinishInflate();
final ListView list = (ListView)findViewById(android.R.id.list);
list.setItemsCanFocus(false);
list.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
Log.d("HERE IT DOES NOT ENTER", "HERE IT DOES NOT ENTER");
}
});
final Button button0 = (Button)findViewById(R.id.button1);
button0.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Log.d("Boton0000", "Boton0000");
}
});
final Button button1 = (Button)findViewById(R.id.button2);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Log.d("Boton1111", "Boton1111");
}
});
final Button button2 = (Button)findViewById(R.id.button3);
button2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Log.d("Boton2222", "Boton2222");
}
});
final Button button3 = (Button)findViewById(R.id.button4);
button3.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Log.d("Boton3333", "Boton3333");
}
});
}
最后,我為listView和列表的每一行顯示.xml:
all.products.xml
<?xml version="1.0" encoding="utf-8"?>
<com.agendajovenzgz.view.MainView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:clickable="false"
>
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="389dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:focusable="true" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="Mapa" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@+id/button1"
android:text="Lista" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@+id/button2"
android:text="Buscador" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_toRightOf="@+id/button3"
android:text="Más" />
</com.agendajovenzgz.view.MainView>
rowlayout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="6dip"
>
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:layout_marginRight="6dip"
android:src="@drawable/ic_launcher"
android:focusable="false"
android:focusableInTouchMode="false"
/>
<TextView
android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginTop="6dip"
android:layout_toRightOf="@id/icon"
android:gravity="center"
android:textStyle="bold"
android:focusable="false"
android:focusableInTouchMode="false"/>
<TextView
android:id="@+id/number"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/icon"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_below="@id/label"
android:layout_alignWithParentIfMissing="false"
android:gravity="center"
android:textSize="12dp"
android:focusable="false"
android:focusableInTouchMode="false" />
</RelativeLayout>
有人能幫助我嗎??
提前致謝。
問候。
您應該在擴展的ListActivity中重寫onListItemClick。
一定不要嘗試使用ListView。 在android中通過一些名稱命名列表視圖:
android:id="@+id/my_list"
然后在您的MainActivity中引用它:
ListView myList = (ListView) findViewById(R.id.my_list);
然后,您可以使用以下方法將onItemClickListener
設置為onItemClickListener
:
myList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick (AdapterView<?> parent, View view, int position, long id) {
// Your code here
}
});
您無需擔心后膨脹,因為在ListView膨脹之前,沒有用戶可以單擊的項目。 無需使用ListActivity,就可以擺脫onFinishInflate()
及其對父項的調用,只需將所有單擊偵聽器放入onCreate()
方法中即可。
此外,還有一個小竅門-聲明變量外onCreate()
方法,並在上一開始定義它們onCreate()
方法。 這將使它們在整個Activity中具有全局性,因此您將不需要final
關鍵字。
在ListActivity
, onContentChanged
做各種事情,包括設置自己的OnItemClickListener
。
這OnItemClickListener
調用onListItemClick
的方法ListActivity
。
因此,要使其正常工作,您需要
onListItemClick
而不是設置OnItemClickListener
setContentView
之后設置OnItemClickListener
(可能在onAttachedToWindow
,這應該在之后發生,但我尚未對此進行測試)。 嘗試將所有textview的clickable屬性設置為false。
android:clickable =“ false”
在Activity#onCreate()
期間將OnItemClickListener
設置為ListView
// inside activity
@Override
protected void onCreate(Bundle savedInstanceState) {
// calls to super and setcontentview
listView = (ListView) findViewById(android.R.id.list);
listView.setOnItemClickListener(new OnItemClickListener() { ......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.