2013-07-29 4 views
3

Как и в названии, мой setOnItemClickListener не работает. Я просмотрел все, что я видел до сих пор, и не смог найти свою ошибку.ListView setOnItemClickListener не работает

Это код:

Это проблематично класс. Это не основной класс, но вызывается из намерения:

package...; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ListAdapter; 
import android.widget.ListView; 

public class GroupActivity extends Activity { 

    String group_id = ""; 
    Context context; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_group); 
     context = this; 

     Intent intent = getIntent(); 
     group_id = intent.getStringExtra("group_id"); 
     Log.i("bla", "Launched GroupActivity for group_id " + group_id); 

     final SubAdapter adapter = new SubAdapter(this, group_id); 
     ListView lv = (ListView) findViewById(R.id.listView1); 
     lv.setClickable(true); 
     lv.setAdapter(adapter); 

     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> av, View v, int idx, long lidx) { 
       Log.i("print here", "blaa " + idx); 

      } 

     }); 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

Это класс SubAdapter:

package...; 

import java.util.ArrayList; 
import java.util.Date; 
import java.util.HashMap; 
import java.util.List; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.drawable.BitmapDrawable; 
import android.graphics.drawable.Drawable; 
import android.text.format.DateUtils; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class SubAdapter extends BaseAdapter { 

    private static final int thumb_width = 128; 
    private static final int thumb_hight = 128; 
    private static Bitmap default_thumb = null; 
    private static LayoutInflater inflater = null; 
    private final String group_id_; 
    private final Activity activity; 
    private final SubAdapter t = this; 

    // used to keep selected position in ListView 
    private int selectedPos = -1; // init value for not-selected 

    public SubAdapter(Activity a, final String group_id) { 
     Drawable d = a.getResources().getDrawable(R.drawable.ic_contact_picture); 
     default_thumb = ((BitmapDrawable) d).getBitmap(); 
     activity = a; 
     group_id_ = group_id; 
     inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public View getView(int idx, View convertView, ViewGroup parent) { 
     Log.i("bla2", "getting view with index " + idx); 
     View vi = convertView; 

     if (convertView == null) { 
      vi = inflater.inflate(R.layout.sub_list_item, null); 
      vi.setClickable(true); 
     } 
     TextView tv1 = (TextView)vi.findViewById(R.id.textView1); 
     TextView tv2 = (TextView)vi.findViewById(R.id.textView2); 
     ImageView img = (ImageView)vi.findViewById(R.id.imageView1); 

     tv1.setText("first name" + " " + "last name"); 
     tv2.setText("some date"); 

     // put thumbnail 
     Bitmap thumb = default_thumb; 
     img.setImageBitmap(thumb); 
     Log.i("bla3", "index is " + idx + "selected index is " + selectedPos); 
     if(selectedPos == idx){ 
      Log.i("bla4", "inside if"); 
     }  
     return vi; 
    } 


    public void setSelectedPosition(int pos){ 
    selectedPos = pos; 
     // inform the view of this change 
     notifyDataSetChanged(); 
    } 

    @Override 
    public void notifyDataSetChanged() { 
     super.notifyDataSetChanged(); 
    } 

} 

Это activity_group XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".GroupActivity" > 

    <ListView 
     android:id="@+id/listView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:clickable="true" 
     android:focusableInTouchMode="false" 
     android:focusable="false" > 

    </ListView> 

</RelativeLayout> 

Это sub_list_item xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:clickable="true" 
    android:focusable="false" 
    android:focusableInTouchMode="false"> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_margin="6dp" 
     android:src="@drawable/ic_launcher" /> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_margin="6dp" 
     android:layout_toLeftOf="@+id/toggleButton1" 
     android:layout_toRightOf="@+id/imageView1" 
     android:text="some text" 
     android:textAppearance="?android:attr/textAppearance" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/textView1" 
     android:layout_below="@+id/textView1" 
     android:layout_toLeftOf="@+id/toggleButton1" 
     android:text="more text" 
     android:textAppearance="?android:attr/textAppearance" /> 

    <ToggleButton 
     android:id="@+id/toggleButton1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_margin="6dp" 
     android:text="present" /> 

</RelativeLayout> 

Помимо прослушивателя кликов, все остальное работает. SubAdapter открывается правильно и список заполняется. В основном, я хочу получить сообщение «Log.i (« print here »,« blaa »+ idx); для печати - это журнал из SetOnItemClickListener ListView (смотрите выше)

Пожалуйста, дайте мне знать, если отсутствует какой-либо другой соответствующий код Спасибо !!!

+0

Попробуйте изменить сообщение журнала to 'Log.i (" print here "," blaa "+ idx.toString());' Кроме того, я бы не стал полностью полагаться на сообщения журнала для такой отладки. Я бы поставил точку останова и удостоверился, что он не вызван. Это рушится или ничего не делает? – codeMagic

+0

Я удалил его полностью, все еще ничего –

+0

Ничего не делает. Остальные сообщения журнала печатаются. Кроме того, после журнала больше кода, который не выполняется. –

ответ

2

Возможно, вы должны удалить звонок в vi.setClickable(true); в свой класс SubAdapter, потому что ваш конвертировщик будет использовать клик перед вашим прослушивателем onItemClick.

+0

Это не было там, я положил его туда, часть пытается найти решение ... –

+0

Хорошо также для android: clickable, android: focusable и android: focusableintouchmode в listview в макете xml. Убери это! – Gomino

+0

Я уверена, спасибо :) –

0

Изменить этот

ListView lv = (ListView) findViewById(R.id.listView1);

в

lv = getListView()

Продлить ListActivity и объявить лв вне методы.

+0

getListView не определено .. –

+0

Но я пробовал объявлять lv снаружи, не помог –

3

В классе GroupActivity пожалуйста, добавьте следующий код перед методом findViewById:

теперь вы получаете вид же и изменить код

ListView lv = (ListView) findViewById(R.id.listView1); 

в

final View v = inflater.inflate(R.layout.rescuer_no_dialog, null); 
ListView lv = (ListView)v.findViewById(R.id.listView1); 
Смежные вопросы