我通过使用基本适配器来扩展列表视图在列表视图中,它们是两个小部件Textview和Edittext。当任何UI元素的行被触摸时突出显示列表视图行
Listview充气正常,它也显示。我们的要求是当用户点击任何行必须是彩色或突出显示的行。当用户点击该行突出显示的其他行时。并且之前的行颜色变得正常。
我通过使用基本适配器来扩展列表视图在列表视图中,它们是两个小部件Textview和Edittext。当任何UI元素的行被触摸时突出显示列表视图行
Listview充气正常,它也显示。我们的要求是当用户点击任何行必须是彩色或突出显示的行。当用户点击该行突出显示的其他行时。并且之前的行颜色变得正常。
要做到这一点,要求重点查看的最好办法,是被感动了,要做到这一点重写方法getView适配器:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
<prepare or create view here>
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
convertView.requestFocus();
}
});
return convertView;
}
,用于提供不同的状态不同的颜色,你可以使用selector背景资源。
那么,它的简单。这是我如何做到的。
首先,您需要两张图像来显示ListView项目的高亮和正常状态。然后你需要为你的ListView使用自定义行。可以说它有一个TextView。
在活动中保留一个整数变量。这个整数将保持ListView的选定索引。最初分配-1值。
现在,由于您使用的是自定义适配器,因此您可以在getView()中检查int变量==是否为postition。相同时,将TextView的背景设置为高亮,否则为正常。并重写OnListItemClick()。在这里,保存该int变量中的位置并调用notifyDataSetChanged()。下面是此示例代码:
public class MySampleActivity extends ListActivity
{
ArrayList<String> lst_string = new ArrayList<String>();
int selected_item = -1;
MyListAdapter adptr;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lst_string.add("item 1");
lst_string.add("item 2");
lst_string.add("item 3");
lst_string.add("item 4");
lst_string.add("item 5");
lst_string.add("item 6");
lst_string.add("item 7");
lst_string.add("item 8");
lst_string.add("item 9");
adptr = new MyListAdapter();
setListAdapter(adptr);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
selected_item = position;
adptr.notifyDataSetChanged();
}
private class MyListAdapter extends BaseAdapter
{
@Override
public int getCount()
{
return lst_string.size();
}
@Override
public Object getItem(int position)
{
return position;
}
@Override
public long getItemId(int position)
{
return position;
}
private LayoutInflater mInflater;
public MyListAdapter()
{
mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null)
{
convertView = mInflater.inflate(R.layout.list_row, null);
holder = new ViewHolder();
holder.textView = (TextView)convertView.findViewById(R.id.tv_row);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder)convertView.getTag();
}
holder.textView.setText(lst_string.get(position));
if(selected_item == position)
{
holder.textView.setBackgroundDrawable(getResources().getDrawable(R.drawable.list_selected));
}
else
{
holder.textView.setBackgroundDrawable(getResources().getDrawable(R.drawable.list_normal));
}
return convertView;
}
}
public static class ViewHolder
{
public TextView textView;
}
}
感谢Khawar,对于这样一个奇妙的解释。我正在扩展活动,这就是为什么他们的任何替代方案都是@Override protected void onListItemClick方法,以及您为列表视图设置单击监听器的位置。 –
感谢吉姆这是为我工作。我有四个视图里面的列表视图3是Textview和1是Edittext。 Listener设置在Textview上,颜色正在改变但是当我点击Edittext时,颜色不会改变。编辑文本上的监听器未设置。 –
发生这种情况是因为EditText捕获触摸事件并执行它自己的操作(如显示键盘等)。如果你想禁止在EditText中输入文本,只需执行'setClickable(false)'。如果你想离开文本输入的可能性,请点击EditText.setOnFocusChanged()' - 并在那里标记孔列表项。 – Jin35
感谢Jim,你能解释一下我必须做些什么来设置List视图的编辑文本上的点击监听器。以便我的问题得到解决。我不理解我有3文本视图,当我点击其中任何一个监听器正在设置,但当我点击编辑文本什么都不会发生 –