我很难弄清楚为什么我的onClick会被错误的课程抓住。
我有一个带有自定义适配器的ListView
并为自定义行充气。
在我的row.xml中,我在onClick方法和后面的代码中放了onRowClick:
public void onRowClick(View v)
{
//do something;
}
应用程序的流程是: 登录=>显示ListView
如果成功则在Login中调用finish()
,然后调用intent以使用ListView打开该类。
我的问题是onClick会在Login类中捕获,而不是在ListView类中捕获。
代码:
public class TabComeLeave extends Activity
{
private ProgressDialog m_ProgressDialog = null;
private ArrayList<Item> m_items = null;
private ItemAdapter m_adapter;
private Runnable viewItem;
private ListView listViewItem;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_come_leave);
listViewItems = (ListView)findViewById(R.id.listViewItems);
listViewItems .setClickable(true);
fillItemList();
}
public void fillItemList()
{
m_adapter = new ItemAdapter(SystemUtil.getInstance(), R.layout.list_row_come_leave, m_Items);
listViewItems.setAdapter(m_adapter);
}
ItemAdapter.java:
public class ItemAdapter extends ArrayAdapter<Item>
{
private ArrayList<Item> items;
public ItemAdapter(Context context, int textViewResourceId, ArrayList<Item> items)
{
super(context, textViewResourceId, items);
this.items = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
if (v == null)
{
LayoutInflater vi = (LayoutInflater)SystemUtil.getInstance().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_row_come_leave, null);
}
Item item = items.get(position);
if (item!= null)
{
TextView itemName = (TextView)v.findViewById(R.id.textViewItemName);
if (itemName != null)
{
itemName .setText(item.getitemFirstName());
}
}
return v;
}
}
有人能指出我正确的方向吗?
非常感谢。
答案 0 :(得分:2)
为什么在使用ListView时不使用onItemClickListener
而不是onRowClick
,这个问题就没有机会发生了。
getListView().setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
//do something
}
});