1

Я пытаюсь реализовать listView с помощью настраиваемого массива. Я вижу свой список, но, когда я пытаюсь выбрать вариант списка, мой реализованный метод onItemClick не работает. Я видел аналогичный вопрос здесь, в StackOverflow, но ни один из предоставленных решений не работает для меня ... Я пробовал с android:descendantFocusability="blocksDescendants", с android:clickable="false" и android:focusable="false" для элементов каждой строки моего списка, и я также попытался сделать MainActivity.java для реализации onItemClick, но это не сработает. Я знаю, что должна быть ошибка в моем коде, но я не могу найти его ...onItemClickListener в listview не работает

Вот мой код:

guia_general_list.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#E6CEC1" 
android:orientation="horizontal" > 

<ListView 
    android:id="@+id/lstOpciones" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="top|center" 
    android:background="#E6CEC1" /> 

</LinearLayout> 

item_elements.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/layoutGeneral" 
android:layout_width="match_parent" 
android:layout_height="55dp" 
android:background="@drawable/menu_selector_bar" 
android:clickable="true" 
android:focusable="true" 
android:orientation="horizontal" > 

<ImageView 
    android:id="@+id/ivQueVerElement" 
    android:layout_width="65dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="center_vertical" 
    android:paddingBottom="1dp" 
    android:paddingLeft="1dp" 
    android:paddingTop="1dp" 
    android:scaleType="fitXY" /> 

<TextView 
    android:id="@+id/txtOptionName" 
    android:layout_width="0dp" 
    android:layout_height="fill_parent" 
    android:layout_gravity="center_vertical" 
    android:layout_weight="1" 
    android:gravity="center_vertical" 
    android:paddingLeft="5dp" 
    android:textColor="#FFFFFF" 
    android:textStyle="bold" /> 

<ImageView 
    android:id="@+id/ivVerOpcion" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_gravity="right|center_vertical" 
    android:src="@drawable/navigation_next_item" /> 

</LinearLayout> 

ElementsAdapter.java

public class ElementsAdapter extends ArrayAdapter<OptionList>{ 

int layoutResourceId; 
Context context; 
OptionList data[] = null; 

public ElementsAdapter(Context context, int layoutResourceId, OptionList[] 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; 
    OptionListHolder holder = null; 

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

     holder = new OptionListHolder(); 
     holder.imgIcon = (ImageView)row.findViewById(R.id.ivQueVerElement); 
     holder.txtTitle = (TextView)row.findViewById(R.id.txtOptionName); 

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

    OptionList option = data[position]; 
    holder.txtTitle.setText(option.getOptionName()); 
    holder.imgIcon.setImageResource(option.getImageName()); 

    LinearLayout layoutItem = (LinearLayout) row.findViewById(R.id.layoutGeneral); 


    return row; 
} 

static class OptionListHolder{ 
    ImageView imgIcon; 
    TextView txtTitle; 
} 

public int getCount() { 
    return data.length; 
} 


public OptionList getItem(int position) { 
    return ((OptionList)data[position]); 
} 

public long getItemId(int position) { 
    return position; 
} 


} 

MainActivity.java:

public class MainActivity extends Activity{ 

ArrayAdapter<String> adaptador; 

public MainActivity() { 
    // TODO Auto-generated constructor stub 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.guia_general_list); 

} 

@Override 
protected void onResume() { 
     super.onResume(); 

    OptionList optionListData[] = new OptionList[]{ 
      new OptionList("Option1", R.drawable.image1), 
      new OptionList("Option2", R.drawable.image2), 
      new OptionList("Option3", R.drawable.image3) 
    }; 

    ElementsAdapter adapter = new ElementsAdapter(this, R.layout.item_elements, optionListData);   

    ListView lstOptions = (ListView)findViewById(R.id.lstOpciones); 

    lstOptions.setAdapter(adapter); 

lstOptions.setOnItemClickListener(new OnItemClickListener(){ 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id){ 

      Toast.makeText(getApplicationContext(), "ENTRA!", Toast.LENGTH_LONG).show(); 
      Log.d("xxx","AAA: Position: "+position); 

      } 

     } 
    }); 


} 

}

Может кто-нибудь мне помочь?

Спасибо заранее!

+0

Удалите прослушиватель кликов, который вы установили на линейной компоновке в адаптере. Удалите андроид: focusable, android: descendantFocusability и android: интерактивные элементы в XML, поскольку они не имеют отношения к кликам. – dymmeh

+0

Закрой свой ответ. Я удалил прослушиватель кликов в адаптере. Сначала у меня его не было, но я все пробовал ... но он все равно не работает. – Ana

+0

Ну, кроме прослушивателя кликов и элементов XML, я указал, что все выглядит нормально. – dymmeh

ответ

0

Ваш код выглядит хорошо, за исключением item_elements.xml. Представления в них доступны для просмотра и/или фокусировки.

Эти две линии, часть, должен быть удален, чтобы получить ваш onItemClickekdListener называется:

android:clickable="true" 
android:focusable="true" 
android:descendantFocusability="blocksDescendants" 

Другие android:clickable и android:focusable атрибуты всей вашей item_elements.xml не нужны, но они не должны вызывать ваш проблема.

+0

благодарю вас за ваш ответ! но, вам не нужно устанавливать 'android: clickable' и' android: focusable' как истинные, чтобы иметь возможность щелкнуть по любому элементу? Я удалил 'android: descendantFocusability =" blocksDescendants ", и теперь у меня есть мой код, поскольку я редактировал ... все еще не работает !! – Ana