在“水平列表”视图中突出显示所选项目

时间:2014-07-08 11:23:19

标签: android horizontallist selectlistitem

默认情况下,我需要在水平列表视图中显示一个项目突出显示,当用户在水平列表视图中选择另一个项目时,我想突出显示该项目(删除较早的项目并突出显示当前选中的项目) ;我在我的适配器中尝试使用以下代码

适配器: -

 int selectedIndex;
 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
   View v = convertView;
   v = LayoutInflater.from(parent.getContext()).inflate(
        R.layout.hlist_rowitem, null);

  if (position == selectedIndex) {
    v.setBackgroundColor(Color.parseColor("#abcdef"));
 }
}

并从列表视图中选择活动中的其他项目后,在活动中要做什么来更改项目的突出显示位置。

的活动: -

int sIndex;
sIndex = getIntent().getIntExtra("POSITION", 0);
hlAdapter = new HSelectedAdapter(InsuranceCard.this, rowItems, sIndex);
hListView.setAdapter(hlAdapter);
hListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
 //other code goes here
}
});

4 个答案:

答案 0 :(得分:2)

我会使用color state list resource并让ListView使用setSelection(position)处理选择。

颜色列表看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:color="#aabbcc"/> <!-- pressed -->
    <item android:state_activated="true"
          android:color="#fedcba"/> <!-- selected -->
    <item android:color="#abcdef"/> <!-- default -->
</selector>

,应将其设置为列表视图中R.layout.hlist_rowitemlistSelector的背景。

编辑: 要在接收点击事件时更改选择:

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

ListView将取消选择旧/默认项目,并在指定位置选择新项目。

编辑2:默认情况下,ListView没有设置选择模式,因此请确保您在xml或代码中设置它:listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

答案 1 :(得分:1)

你可以通过两种方式实现这一目标。

  1. 手动清除onItemClick()

    中选中的所有项目和集合
    listview.setOnItemClickListener(new OnItemClickListener() {
    
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
    
            for (int i = 0; i < adapter.getCount(); i++) {
            View item = listview.getChildAt(i);
            if (item != null) {
                item.setBackgroundResource(R.drawable.unselected);
            }
            arg1.setBackgroundResource(R.drawable.selected);
        }
    
        }
    });
    
  2. 使用选择器并让listview自行完成。

  3. /drawable/selector_list.xml

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

    并将android:listSelector="@drawable/selector_list"添加到您的列表视图

答案 2 :(得分:0)

添加listitemclick.xml 在你的drawblw文件夹中这是代码。                                              2)然后在你的hlist_rowitem.xml中设置background =“@ drawable / listitemclick”

答案 3 :(得分:0)

请按以下步骤操作: 1)声明一个布尔数组。 public static boolean ClickItem []; 2)在oncreate里面 ClickItem = new boolean [你的数组大小];  Arrays.fill(ClickItem,false);

适配器中的

编写此代码 一)
    如果ClickItem [pos]     {       v.setBackgroundColor(Color.parseColor( “#ABCDEF”));     }否则

A)        v.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

        Arrays.fill(ClickItem, false);
            ClickItem[pos]=true;

            adapter1.notifyDataSetChanged();


        }
    });