1

我想实现一个listView使用自定义arrayAdapter。我可以看到我的列表,但是当我尝试选择列表中的一个选项时,我的实现方法onItemClick不起作用。我在StackOverflow中看到过类似的问题,但是没有提供的解决方案适用于我...我试过android:descendantFocusability="blocksDescendants"android:clickable="false"android:focusable="false"作为我列表中每一行的元素,而且我也尝试过MainActivity.java来实现onItemClick,但它不起作用。我知道我必须有一个错误在我的代码,但我不能找到它...onItemClickListener在列表视图不起作用

这里是我的代码:

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

删除您在适配器的线性布局上设置的点击侦听器。删除XML中的android:focusable,android:descendantFocusability和android:clickable元素,因为它们对点击没有影响。 – dymmeh 2013-02-27 18:50:28

+0

谢谢你的回答。我删除了适配器中的点击侦听器。起初我没有,但我正在尝试一切......但它仍然无法正常工作。 – Ana 2013-02-27 18:58:50

+0

那么,除了点击侦听器和XML元素,我指出一切看起来都不错。 – dymmeh 2013-02-27 19:06:41

回答

0

除了item_elements.xml,您的代码看起来不错。那里的视图是可点击和/或可调焦的。

这两行,的部分必须被去除,以得到所谓的onItemClickekdListener:

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

其他android:clickableandroid:focusable属性整个item_elements.xml是不必要的,但他们不应该引起你的问题。

+0

谢谢你的回答!但是,您是否需要将'android:clickable'和'android:focusable'设置为true以便能够单击任何元素?我删除了'android:descendantFocusability =“blocksDescendants”'现在我有我的代码,因为我编辑了...仍然不工作! – Ana 2013-02-28 11:22:57

相关问题