【问题标题】:How to Highlight single item in Listview如何在 Listview 中突出显示单个项目
【发布时间】:2016-04-10 03:44:24
【问题描述】:

当我单击列表视图中的任何项目时,该项目突出显示,但当我单击第二个项目时,它也突出显示。我只想突出显示一项。

menu.xml

<ListView
            android:id="@+id/list"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.8"
            android:background="#50332b"
            />

Menulist.java

    lstcategory = (ListView) view.findViewById(R.id.list);
    lstcategory.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    lstcategory.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
                    view.setBackgroundColor(Color.BLUE);

【问题讨论】:

  • 您要突出显示哪个位置项?
  • 我在列表视图中单击的项目应突出显示
  • @tamil arasan:使用布尔标志并在第一个项目选择后将其设置为 false。
  • 这是我的答案,你可以查看 - stackoverflow.com/a/18119283/726863
  • 检查列表视图position

标签: android arrays listview android-listview android-adapter


【解决方案1】:

在你的 pojo 类中添加布尔标志说

Boolean isSelected;

在其中应用 getter 和 setter。 最初设置 isSelected = false 的所有值,以便不选择列表项

现在在 onItem 单击期间将当前对象的 isSelected 设置为 true 像这样

在 onItemClick 内应用这个

OnItemClickListener listViewOnItemClick = new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) {

for(int i =0;i  < lstcategory.size();i++}{
lstcategory.get(i).setIsSelected(false);
}

lstcategory.get(position).setIsSelected(true); 
            mAdapter.notifyDataSetChanged();

    }
};

现在在您的适配器类的 getview 中检查列表项是否已检查。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final View view = View.inflate(context, R.layout.item_list, null);

    if (lstcategory.get(position).getIsSelected()) {
        // set selected your color
    }else{
       //set default color
    }


    return view;
}

【讨论】:

    【解决方案2】:

    您需要跟踪当前选定元素的位置:

    例子:

    OnItemClickListener listViewOnItemClick = new OnItemClickListener() {
    
        @Override
        public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) {
                mSelectedItem = position;
                mAdapter.notifyDataSetChanged();
        }
    };
    

    并覆盖适配器的 getView 方法:

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final View view = View.inflate(context, R.layout.item_list, null);
    
        if (position == mSelectedItem) {
            // set selected your color
        }else{
           //set default color
        }
    
    
        return view;
    }
    

    【讨论】:

      【解决方案3】:

      在drawable文件夹中创建一个row_selector

      <?xml version="1.0" encoding="utf-8"?>
      
      <selector xmlns:android="http://schemas.android.com/apk/res/android">
          <item android:state_selected="true" android:drawable="@color/white" />
          <item android:state_pressed="true" android:drawable="@color/white" />
          <item android:state_activated="true" android:drawable="@color/white" />
          <item android:drawable="@color/light_gray" />
      </selector>
      

      现在将其作为 android:background="@drawable/row_selector" 应用到行的父视图。

      在java代码中设置ListView为CHOICE_MODE_SINGLE

      listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

      【讨论】:

        猜你喜欢
        • 2012-01-05
        • 2013-02-04
        • 1970-01-01
        • 2013-11-18
        • 1970-01-01
        • 2016-03-22
        • 1970-01-01
        • 1970-01-01
        • 2012-01-23
        相关资源
        最近更新 更多