【问题标题】:Does anyone know how to highlight a selected item in a Android listView?有谁知道如何突出显示 Android listView 中的选定项目?
【发布时间】:2011-09-14 17:14:29
【问题描述】:

我正在尝试创建一个列表视图,在该列表视图中点击一个项目,背景会改变颜色。到目前为止,我当前的实现导致“相反的”可见单元格的背景发生了变化。例如,如果我选择列表中的顶部项目,则底部项目会突出显示。谁能帮我实现所需的功能?

我的列表活动:

        public void onCreate(Bundle savedInstanceState) {

    Log.e(TAG, "Starting Symptom Activity...");
    super.onCreate(savedInstanceState);


    setContentView(R.layout.symptom_listview);
    // Setup list
    this.setupSymptomScreen();
    startManagingCursor(cs);
    //get handle on buttons
    Button nextButton = (Button) findViewById(R.id.symptom_next);
    Button backButton = (Button) findViewById(R.id.symptom_goBack);
    ListView lv =getListView();

    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    lv.setItemsCanFocus(false);

    SymptomAdapter adapter = new SymptomAdapter(this,
            R.layout.symptom_item, cs, new String[] { DbAdapter.KEY_SYMPTOM },
            new int[] { R.id.txt_symptom });

    selectedItems = new HashSet<String>();
    adapter.setLookupTable(selectedItems);
    setListAdapter(adapter);



    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
        if(!selectedItems.contains(view.toString()))
        {
            view.setBackgroundColor(Color.CYAN);
            String symptom = ((TextView) view.findViewById(R.id.txt_symptom)).getText().toString();
            selectedItems.add(symptom);

        }
        else
        {
            view.setBackgroundColor(Color.WHITE);
            selectedItems.remove(view.toString());
        }


                    }
      });
          nextButton.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {
            // import selected items into a list
            importSelected();
            // figure out category
            process();
        }
    });
    //List for symptom ids
    symptoms_id = new ArrayList<Integer>(cs.getCount());

}

我还制作了自己的适配器,并在其中覆盖了 getView

    public View getView(int position, View convertView, ViewGroup parent) {

        if(convertView != null){
            String symptoms = ((TextView) convertView.findViewById(R.id.txt_symptom)).getText().toString();
            if(!selectedItems.contains(symptoms))
                convertView.setBackgroundColor(Color.WHITE);
            }

            return super.getView(position, convertView, parent);
    }

【问题讨论】:

    标签: android android-listview


    【解决方案1】:

    这是一个例子:

    private class ItemAdapter extends SimpleAdapter {
    
        private int mItemIndex = -1; 
    
        public ItemAdapter(Context context,
            List<? extends Map<String, ?>> data, int resource,
            String[] from, int[] to) {
            super(context, data, resource, from, to);
            // TODO Auto-generated constructor stub
        }
    
        /* (non-Javadoc)
         * @see android.widget.SimpleAdapter#getView(int, android.view.View, android.view.ViewGroup)
         */
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            View view = super.getView(position, convertView, parent);
            if (position == mItemIndex) {
                convertView.setSelected(true);
                convertView.setPressed(true);
                convertView.setBackgroundColor(Color.parseColor("#FF9912"));
            }
    
            return view;
        }
    
        public void setSelectItem(int index) {
            mItemIndex = index;
        }
    
        public int getSelectItem() {
            return mItemIndex;
        }
    
    }
    

    当你选择一个项目时,onItemClick 函数是这样的:

    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        ((ItemAdapter)list.getAdapter()).setSelectItem(arg2);
    }
    

    【讨论】:

    • 在“if (position == mItemIndex)”之后需要一个 else 块来重置你的颜色。 SimpleAdapter 可以再次在别处重复使用相同的视图(convertView)
    猜你喜欢
    • 2012-01-23
    • 2012-06-23
    • 2011-08-16
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多