android onclick被错误的类抓住了

时间:2012-12-14 12:41:45

标签: android onclicklistener

我很难弄清楚为什么我的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;
    }    
}

有人能指出我正确的方向吗?

非常感谢。

1 个答案:

答案 0 :(得分:2)

为什么在使用ListView时不使用onItemClickListener而不是onRowClick,这个问题就没有机会发生了。

getListView().setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            //do something
        }
    });