在循环中突出显示自定义ListView项

时间:2015-12-30 05:01:06

标签: android android-layout listview android-listview

您好我想更改listView项目的背景。但它只在触摸时突出显示。但我想更改背景,直到我将焦点更改为其他项目。 我到目前为止所做的就是下面的内容。

Back.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_enabled="false" android:state_focused="true"
    android:drawable="@android:color/black" />
<item android:state_pressed="true"
    android:drawable="@android:color/holo_red_dark" />
<item android:state_focused="true"
    android:drawable="@android:color/holo_red_dark" />

的ListView

  <ListView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:fastScrollEnabled="true"
    android:drawSelectorOnTop="true"
    android:clickable="true"
    android:listSelector="@drawable/listviewcolor"
    android:scrollingCache="false">
</ListView>

在Main我已经尝试了一切但不起作用它只在触摸时突出显示。 但我想保持突出,直到我改变它。

ListView.requestFocus();
        ListView.setActivated(true);
        ListView.setPressed(true);
        ListView.setItemChecked(4, true);
        ListView.requestFocusFromTouch();
        ListView.setSelection(2);

1 个答案:

答案 0 :(得分:0)

这只能通过以下方式使用customAdapter来实现。

当用户触摸布局设计中的其他项目时,最初Listview将失去焦点。保持选择的一种方法,即使它没有被关注,也是:

  1. 跟踪ListView中的所选位置。
  2. 使用ListView适配器中的选定位置,并根据选择设置其视图背景颜色。
  3. 通过这样做,您的背景颜色将保持选中状态。

    实施例: 在自定义适配器内

    Private  int studentListItemSelected;
    
    public void ItemSelected(int itemPosition)
        {
        //This method will keep track which position of the List is Selected and the background color of it is inside this.
            this.studentListItemSelected=studentListItemSelected;
            notifyDataSetChanged();
        }
    
     public View getView(int position, View convertView, ViewGroup parent) 
    {
     //layout inflation code
      if(this.studentListItemSelected==position)
    {
      convertView.setBackgroundColor(Color.Red);
    }
    else
    {
     convertView.setBackgroudnColor(Color.White);
    }
    
      return convertView;
    }
    

    在您的布局Java文件中:

    yourListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
          adapter.ItemSelected(position);
    
    });