如何选择android listview
我在android中使用了horizontallistview。而且做得很好。当我点击时,我选择了horizontallistview项目。而且它也起了作用。单击时,一个项目的背景已更改。这是我的源代码如何选择android listview,android,listview,select,horizontallist,Android,Listview,Select,Horizontallist,我在android中使用了horizontallistview。而且做得很好。当我点击时,我选择了horizontallistview项目。而且它也起了作用。单击时,一个项目的背景已更改。这是我的源代码 TextView selectedListItem = null; String pre_Color = "#6C6C6C"; String select_Color = "#FFFFFF"; @Override protected void onCre
TextView selectedListItem = null;
String pre_Color = "#6C6C6C";
String select_Color = "#FFFFFF";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listview = (HorizontialListView) findViewById(R.id.listview);
listview.setAdapter(mAdapter);
listview.setOnItemClickListener(new ListViewItemClickListener());
}
private class ListViewItemClickListener implements
AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
mPager.setCurrentItem(position);
if (selectedListItem != null) {
TextView previousTitle = (TextView) selectedListItem
.findViewById(R.id.title);
previousTitle.setBackgroundResource(R.drawable.list_shape);
previousTitle.setTextColor(Color.parseColor(pre_Color));
}
TextView title = (TextView) view.findViewById(R.id.title);
title.setBackgroundResource(R.drawable.list_selected_shape);
title.setTextColor(Color.parseColor(select_Color));
selectedListItem = title;
}
}
但当我在同一点上拖动horizontallistview并再次拖动时,我通过单击更改的项目没有更改!!!!这让我发疯
像这张图片一样,我选择了一个项目。我拖拽了一些东西,回到这里
然后
事情变成这样了。没有蓝色背景
我该怎么做才能解决这个问题 这是由于列表视图循环,我会制作一个自定义绘图,并在选中时将其显示为选中状态,然后在项目上单击调用
listview.setItemChecked(position, true);
您将需要处理未选中的其他项。该错误是因为Android在生成视图时保留视图,以便在再次显示视图时重用它 请特别阅读适配器文档中的convertView参数: 在getView中可能有类似的内容:
if(convertView != null){
return convertView;
}
如果您计划在listview中更新视图,这不是一个好方法。
最好的方法是使用ViewHolder图案,如下所述:
跟踪单击的项目。然后在适配器中的getview中,检查项目的位置是否与单击的位置匹配,如果匹配,请将其bg resource设置为所需的颜色或可绘制颜色
希望对您有所帮助。在这种情况下,我认为您需要从ArrayAdapter类管理它。 在这里,您必须记住上次单击的项目视图和位置 其基本思想是只单击列表项,然后将单击的位置和项目视图传递给适配器 我们将用您喜欢的颜色设置它的背景,并将最后选择的颜色更改为查看 背景色设置为默认颜色
public class SampleAdapter extends ArrayAdapter<Object> {
private int mSelection = 0;
public SampleAdapter(Context context, int resource, int textViewResourceId,
List<Object> objects) {
super(context, resource, textViewResourceId, objects);
}
public void setSelection(int mSelection, View selectedItemView) {
this.mSelection = mSelection;
if (selectedItemView!= null && lastSelectedRow != null
&& selectedItemView!= lastSelectedRow) {
lastSelectedRow
.setBackgroundResource(R.drawable.bg_normal);
selectedItemView
.setBackgroundResource(R.drawable.bg_selected);
}
this.lastSelectedRow = selectedItemView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//Usual code logic here....
if (mSelection == position) {
mViewHolder.mRootView
.setBackgroundResource(R.drawable.bg_selected);
lastSelectedRow = mViewHolder.mRootView;
} else {
mViewHolder.mRootView
.setBackgroundResource(R.drawable.bg_normal);
}
return view;
}
private static class ViewHolder {
TextView name;
View mRootView;
}
}
我照你的回答做了。现在我有另一个问题。当我单击一个项目时,该项目不再更改以前的背景。但如果我点击了第一个项目,那么fiveitem也会发生变化。如果我点击了第四项,那么第九项被改变了。那么你得到解决方案了吗?因为我有同样的问题,我和你一样实现了同样的问题。所以我你解决了这个问题,请给出一些想法。
public void onItemClick(AdapterView<?> arg0, View listItemView,
int position, long id) {
if(myAdapter != null )
{
myAdapter.setSelection(position,listItemView);
}
}
myAdapter.setSelection(position,mListViwe.getChildAt(pos));
mListViwe.setSelectionFromTop(position, 0);