2014-07-08 46 views
1

默认情况下,我需要在水平列表视图中突出显示一个项目,并且当用户在水平列表视图中选择另一个项目时,我想突出显示该项目(先移除并突出显示当前选定的),对于我正在用下面的代码试图在我的适配器在水平列表视图中突出显示选定的项目

适配器: -

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 
} 
}); 

回答

0

附加listitemclick.xml 在drawblw文件夹这是代码。 2)然后在你的hlist_rowitem.xml组后台= “@绘制/ listitemclick”

+0

那么如何删除早期选择的项目? – Harish

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_rowitem的背景或为listSelector的列表视图。

编辑: 接收click事件时更改的选择:

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);

+0

那么如何删除早期选择的项目? – Harish

+0

你没有了:) ListView仅突出显示一个选定的项目,因此每次选择新项目时都会取消选择旧项目。 – Delblanco

+0

如果你在上面观察我的问题,我将默认项目设置为选中状态,现在问题是删除默认选项并应用新的选定项目。 – Harish

1

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

  1. 手工清除onItemClick选择的所有项目和set()

    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. 使用选择,让列表视图做本身。

/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"到你的ListView

+0

需要显示一个项目,因为它是默认选择,并且当用户根据更改选择而改变时。 – Harish

+0

使用此[如何以编程方式点击ListView项目](http://stackoverflow.com/a/16278023/1608643) –

+0

嘿谢谢你的回答它的工作。但是当我点击第一个滚动然后最后一个项目也被选中。当我第二项选择,然后选择两项中的最后一项。 –

0

请按照下列步骤操作: 1)声明一个布尔数组。 public static boolean ClickItem []; 2)inside oncreate ClickItem = new boolean [your array size]; 数组。填充(ClickItem,false);

在适配器中写入该代码 一个)
如果ClickItem [POS] { v.setBackgroundColor(Color.parseColor( “#ABCDEF”)); }其他

一) v.setOnClickListener(新OnClickListener(){

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

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

      adapter1.notifyDataSetChanged(); 


     } 
    }); 
+0

1)它不是多重选择2)什么是arrays.fill()以及如何让它进入适配器。 – Harish

相关问题