Android 适配器x上的OnClickListener和ListView上的OnClickListener

Android 适配器x上的OnClickListener和ListView上的OnClickListener,android,listview,Android,Listview,我一直想知道哪一个使用起来更快/更好: public class SomeAdapter extends BaseAdapter { private Activity activity; private ArrayList<HashMap<String, String>> data; private static LayoutInflater inflater = null; public SomeAdapter(Activity a,

我一直想知道哪一个使用起来更快/更好:

public class SomeAdapter extends BaseAdapter
{

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater = null;

    public SomeAdapter(Activity a, ArrayList<HashMap<String, String>> d)
    {
        activity = a;
        data = d;
        inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

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

    public View getItem(int position) { return null; }

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

    static class ViewHolder
    {
        public ImageView someImage;
    }

    public View getView(int position, View convertView, ViewGroup parent)
    {
        ViewHolder holder;

        if(convertView == null)
        {
            convertView = inflater.inflate(R.layout.adapter_some, null);
            holder = new ViewHolder();

            holder.someImage = (ImageView) convertView.findViewById(R.id.someImage);
        }
        else
        {
            holder = (ViewHolder) convertView.getTag();
        }

        HashMap<String, String> events = new HashMap<String, String>();
        events = data.get(position);

        int res = Integer.parseInt(events.get("imageResource"));

        holder.someImage.setImageResource(R.drawable.res);

        convertView.setOnClickListener(new OnClickListener
        {
            @Override
            public void onClick(View v)
            {
                // TODO something here
            }
        });

        return convertView;
    }
}
谢谢

我应该在convertView上设置
OnClickListener
,还是应该在ListView上设置
OnItemClickListener

列表视图
上设置一个
监听器

这样,您将在整行上设置侦听器。如果您的
ListViews
行中有各种元素应该是可单击的,并且可以执行其他操作,而不是整行上的单击事件,则只应在特定的
视图上设置
OnClickListener

我应该在convertView上设置
OnClickListener
,还是应该在ListView上设置
OnItemClickListener

列表视图
上设置一个
监听器


这样,您将在整行上设置侦听器。如果您的
列表视图
行中有多种元素可以单击并执行其他操作,而不是整行上的单击事件,则只应在特定的
视图
上设置
OnClickListener

最佳做法是在列表视图中实施,因为您的适配器可以用于其他listview。适配器的主要功能只是将信息组织、显示并适配到某个容器(在本例中为Listview),而从不验证功能性,因为代码或验证应位于业务层。

最佳实践是在Listview中实现的,因为您的适配器可用于另一个Listview。适配器的主要功能只是将信息组织、显示并适配到某个容器(在本例中为Listview),而从不验证功能性,因为代码或验证应该在业务层中。

我怀疑速度是否应该是决定性因素。 您不会根据速度来做出选择,相反,答案在于列表视图的单行中是否有很多可单击的子项,您希望单独使用它们还是以特定的方式使用它们。如果是的话,您可以这样做,但请记住,由于listview项是循环使用的,所以您必须编写额外的代码来跟踪与列表行关联的数据


如果子项不多(在您的案例中显示),则在ListView上设置OnItemClickListener是最佳选择。它有很好的包装方法来完成最有用的工作,并保持适配器的清洁和可重用性。

我怀疑速度应该是决定性因素。 您不会根据速度来做出选择,相反,答案在于列表视图的单行中是否有很多可单击的子项,您希望单独使用它们还是以特定的方式使用它们。如果是的话,您可以这样做,但请记住,由于listview项是循环使用的,所以您必须编写额外的代码来跟踪与列表行关联的数据

如果子项不多(在您的案例中显示),则在ListView上设置OnItemClickListener是最佳选择。它有很好的包装方法来做最有用的事情,并保持您的适配器干净和可重用

someList = (ListView) ((ViewGroup) rootView.findViewById(R.id.listLayout)).getChildAt(0);

someList.setAdapter(new SomeAdapter(getActivity(), null));

someList.setOnItemClickListener(new OnItemClickListener()
{
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            long arg3)
    {
        // TODO something here
    }
});