[英]Separately highlight nested TextView and ImageView in ListView row
(好吧,我已經做了很多研究,找到了一些答案,但對我來說並沒有什么用。。所以我終於在這里開設了一個帳戶。感謝社區早些時候提供的所有答案!)
我正在創建類別選擇器(帶有自定義適配器的ListView)-每個類別可以具有多個子類別,每個子類別可以具有多個子類別。 對於選擇器,我使用帶有自定義列表項的ListView-TextView(用於顯示類別)和ImageView(向前箭頭),以指示類別是否具有子類別-請參見此圖像:
我希望用戶執行以下操作
(1)單擊類別名稱以選擇該類別
(2)單擊前進箭頭以查看所有子類別(它將使用所有子類別重新填充ListView)
我希望用戶看到以下亮點/關注於用戶是否執行了兩個操作(1)和(2)
看到這張圖片:
當用戶單擊類別名稱/行時,突出顯示該行。 這是自動發生的,因為我已經設置
listView.setOnItemClickListener()
看到這張圖片:
我希望用戶僅在前向箭頭而非行上看到突出顯示。 我可以在圖像上注冊點擊
imageView.setOnClickListener()
在我的自定義適配器中,但是我無法在前向箭頭上突出顯示
如何在ImageView上獲得此突出顯示?
Activity's onCreate() {
LayoutInflater inflater = getActivity().getLayoutInflater();
View categorySelectView = inflater.inflate(R.layout.cat_select, null);
LinearLayout categorySelectLayout = (LinearLayout) categorySelectView;
ListView categoryListView = (ListView) categorySelectLayout.findViewById(R.id.list_cat_select);
CategoryArrayAdapter categoryArrayAdapter = new CategoryArrayAdapter(this.getActivity(), CategoryAdapter.getAllCategories());
categoryListView.setAdapter(categoryArrayAdapter);
categoryListView.setOnItemClickListener(categorySelectClickHandler);
}
CategoryARrayAdapter's getView(int position, View covertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.cat_item, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.cat_name);
Category catToDisplay = categories.get(position);
textView.setText(catToDisplay.getName());
if(catToDisplay.isParent()) {
ImageView imageView = (ImageView) rowView.findViewById(R.id.cstrow_cat_expand);
imageView.setImageResource(R.drawable.cat_expand);
imageView.setOnClickListener(categoryExpandClickHandler);
imageView.setFocusable(false); // to make sure the highlight on row shows
imageView.setFocusableInTouchMode(false); // to make sure the highlight on row shows
}
return rowView;
}
這就是我所做的。 這也應該是可擴展的。
CategoryArrayAdapter具有以下getView()
public View getView(int position, View covertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.cat_select, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.cat_name);
Category catToDisplay = categories.get(position);
textView.setText(catToDisplay.getName());
if(catToDisplay.isParent()) {
ImageView imageView = (ImageView) rowView.findViewById(R.id.cstrow_cat_expand);
imageView.setImageResource(R.drawable.cat_expand);
imageView.setOnClickListener(categoryExpandClickHandler);
imageView.setOnTouchListener(categoryExpandTouchHandler);
imageView.setFocusable(false); // to make sure the highlight on the item shows
imageView.setFocusableInTouchMode(false); // to make sure the highlight on the item shows
imageView.setTag(catToDisplay);
}
return rowView;
}
使這項工作起作用的兩件事
imageView.setOnTouchListener()
允許我設置高光(感謝Piyush Gupta指出setBackgroundColor()
方法 imageView.setOnClickListener()
允許我在用戶單擊箭頭時執行操作
/** * This method listens to the TOUCH CLICK on the IMAGEVIEW to give it button like feeling */ private View.OnTouchListener categoryExpandTouchHandler = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_DOWN: { v.setBackgroundColor(getContext().getResources().getColor(R.color.highlight_cat_expand)); break; } case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: { v.setBackgroundColor(getContext().getResources().getColor(android.R.color.transparent)); break; } } return false; } }; /** * This method listens to EXPAND IMAGEVIEW CLICK in the LISTVIEW of categories */ private View.OnClickListener categoryExpandClickHandler = new View.OnClickListener() { @Override public void onClick(View view) { // Expanding this category ... expand code here ... } };
要使HIGHLIGHT和CLICK一起工作,請在onTouchListener()
return false
。 這會將touch事件傳遞給onClickListener()
。 我得到了這個解決方案https://stackoverflow.com/a/10376887/3393044 通過評論薄
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.