onItemClickListener с пользовательским адаптером и списком просмотра

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

адаптер:

public class ModuleAdapter extends ArrayAdapter<Module> {

Context context;
int layoutResourceId;
Module data[];

public ModuleAdapter(Context context, int layoutResourceId,
        Module data[]) {
    super(context, layoutResourceId, data);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.data = data;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    ModuleHolder holder = null;

    if(row == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new ModuleHolder();
        holder.modJapTitle = (TextView)row.findViewById(R.id.moduleJapTitle);
        holder.modEngTitle = (TextView)row.findViewById(R.id.moduleEngTitle);
        holder.modComp = (TextView)row.findViewById(R.id.moduleCompletion);
        holder.modRating = (RatingBar)row.findViewById(R.id.moduleScore);

        row.setTag(holder);
    }
    else
    {
        holder = (ModuleHolder)row.getTag();
    }

    Module module = data[position];
    holder.modJapTitle.setText(module.moduleJapaneseTitle);
    holder.modEngTitle.setText(module.moduleEnglishTitle);
    holder.modComp.setText(module.moduleCompletionRate);
    holder.modRating.setRating(module.moduleRating);

    return row;
}

static class ModuleHolder
{
    TextView modEngTitle;
    TextView modJapTitle;
    TextView modComp;
    RatingBar modRating;
}

}

Реализация:

ModuleAdapter moduleData = new ModuleAdapter(this, R.layout.module_box_item, module_data);
    ListView listView1 = (ListView)findViewById(R.id.moduleListContainer);
    listView1.setAdapter(moduleData);
    listView1.setCacheColorHint(Color.TRANSPARENT);
    listView1.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.v("Module Item Trigger", "Module item was triggered");
            Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show();
        }
    });

Также вот XML-макет для одного из элементов в списке:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/moduleBox"
android:id="@+id/moduleBoxSingle" >

<TextView
    android:id="@+id/moduleJapTitle"
    style="@style/moduleTitleJap" />
<TextView
    android:id="@+id/moduleCompletion"
    android:layout_above="@+id/moduleSepartor"
    style="@style/moduleCompletion" />
<View
    android:id="@+id/moduleSepartor"
    android:layout_below="@+id/moduleJapTitle"
    style="@style/moduleSeperator" />
<TextView
    android:id="@+id/moduleEngTitle"
    android:layout_below="@+id/moduleSepartor"
    style="@style/moduleTitleEng" />
<RatingBar
    android:id="@+id/moduleScore"
    android:layout_below="@+id/moduleSepartor"
    style="@style/moduleRating"
    android:layout_alignParentRight="true" />

</RelativeLayout>
 rajpara29 июн. 2012 г., 19:09
Вы можете опубликовать свой макет XML здесь.
 mwrazam30 июн. 2012 г., 04:44
Здравствуйте, спасибо за ваш ответ. Я добавил строку для записи в Logcat. И я также добавил в макет XML, используемый для каждого отдельного элемента списка.
 Frank Sposaro29 июн. 2012 г., 18:48
Все выглядит хорошо. Возможно, это проблема пользовательского интерфейса? Почему бы вам не написать в logcat вместо того, чтобы всплывать тост. Просто чтобы быть на 100% уверенным, что ваш слушатель не вызывается.

Ответы на вопрос(4)

Прежде всего, для этого вам нужно реализовать класс следующим обработчиком

implements  OnItemClickListener 

затем добавьте функцию, как указано ниже onItemClick ()

public void onItemClick(AdapterView parent, View v, int position, long id) {
  Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show();   
}

И когда мы устанавливаем адаптер данных наlistview затем добавьте следующую строку кода

itemlist.setOnItemClickListener(this);

Надеюсь, это будет работать для вас ...

 mwrazam30 июн. 2012 г., 04:50
Здравствуйте, спасибо за ваш ответ. Я попробовал, но результат был таким же, как и у исходного кода, который я имел выше. Может быть, что-то не так с моим кодом, который не запускает этот слушатель?
Решение Вопроса

Я думаю, что это такая же проблема, какэтот.

Добавьте ниже код к вашемуTextView в XML

android:focusableInTouchMode="false"
android:clickable="false"
android:focusable="false"

и попробуй еще раз.

 mwrazam30 июн. 2012 г., 09:23
Это сделал трюк! Огромное спасибо. Много волос сохранено. :)

Попробуй это...

ListView lv = (ListView)findViewById(R.id.Your_ListView_Id);  // If it extends Activity.

ИЛИ ЖЕ

ListView lv = getListView;  // If it extends ListActivity.
lv.setOnItemClickListener(this); // Make the Activity implement onItemClickListener
lv.setAdapter(your_adapter);

Edited part: Change made in Toast's Context, and Added SysOut

// Метод, который будет обрабатывать события.

public void onItemClick(AdapterView parent, View v, int position, long id{
     Toast.makeText(Your_Activity_Name.this, "hello", Toast.LENGTH_SHORT).show();
     System.out.println("This is a Test");
}

CHECK YOU LOG.. DOES THE SYSOUT STATEMENT GETS PRINTED !!

 mwrazam30 июн. 2012 г., 09:00
Здравствуйте, спасибо за ваше сообщение. К сожалению, это тоже не работает. Тост сообщение все еще не стреляет.
 30 июн. 2012 г., 09:19
Минутку ....... попробуйте это .. Toast.make Toast.makeText (Your_Activity_Name.this, & quot; hello & quot ;, Toast.LENGTH_SHORT) .show ();

У меня та же проблема, и я исправляю это как: (см.https://github.com/sephiroth74/HorizontalVariableListView/issues/33 ) add this line in root view in layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/moduleBox"
android:id="@+id/moduleBoxSingle"
android:descendantFocusability="blocksDescendants" >

Ваш ответ на вопрос