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
}
});