我通過使用基本適配器來擴展列表視圖在列表視圖中,它們是兩個小部件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文本視圖,當我點擊其中任何一個監聽器正在設置,但當我點擊編輯文本什麼都不會發生 –