在很多時候會有以下場景,使用者選擇一個條目,又或者是開啟一個服務關閉一個服務(比如開啟攔截黑名單服務)等,都是需要儲存狀态,給使用者提示目前選的是哪一個item,是以説 按下控件,擡起手時,保持控件按下時的顔色這樣就會體驗很好
listview中的item,使用背景選擇器,然後代碼裡通過打标記設定holder.tv_select_device.setSelected(true);來控制目前item的狀态,标注:設定textColor可以,設定resource可以,但是這個方法不能設定背景,背景還得靠代碼裡實作
holder.llayout.setBackgroundResource(R.drawable.popupwindow_bg_selector);
item布局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@drawable/popupwindow_bg_selector"
android:gravity="center_vertical"
android:id="@+id/ll_llayout_all"
>
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="30dp"
android:background="@drawable/popupwindow_bg_item_logo"
/>
<TextView
android:id="@+id/tv_selectdev"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:text="會議室的盒子"
android:textSize="20sp"
android:gravity="center_vertical"
android:textColor="@drawable/font_down_green_up_black"
android:layout_marginLeft="30dp"
/>
<ImageView
android:id="@+id/iv_ok"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginRight="30dp"
android:visibility="invisible"
android:background="@drawable/popupwindow_bg_item_ok"
/>
</LinearLayout>
文本狀态選擇器 font_down_green_up_black.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_focused="true" android:color="#2CD41D" /> <!-- focused -->
<item android:state_pressed="true" android:color="#2CD41D" /> <!-- pressed -->
<item android:state_selected="true" android:color="#2CD41D" /> <!-- pressed -->
<item android:state_checked="true" android:color="#2CD41D"/>
<item android:color="#000000" /> <!-- default -->
</selector>
代碼中通過标記控制狀态:
public class ActivityC extends Activity implements OnItemClickListener {
private ListView lv_devicelist;
private ArrayList testList ;
private TestAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_c_fill);
lv_devicelist = (ListView) findViewById(R.id.lv_devicelist);
adapter = new TestAdapter();
testList = new ArrayList();
testList.add(new String ("HelloWorld one"));
testList.add(new String ("HelloWorld two"));
testList.add(new String ("HelloWorld three"));
lv_devicelist.setAdapter(adapter);
lv_devicelist.setOnItemClickListener(this);
}
class TestAdapter extends BaseAdapter{
int a = -1;
public void setSelectFlag(int flag){
if (flag==a) {
return;
}
System.out.println("notifydata..........");
a = flag;
notifyDataSetChanged();
}
@Override
public int getCount() {
return 3;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
//
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
ViewHolder holder;
if (convertView != null ) {
view = convertView;
System.out.println("複用了一個view" + position);
holder = (ViewHolder) view.getTag();
} else {
view = View.inflate(getApplicationContext(),
R.layout.activity_c_fill_item, null);
System.out.println("新的view" + position);
holder = new ViewHolder();
holder.tv_select_device = (TextView) view
.findViewById(R.id.tv_selectdev);
holder.iv_ok = (ImageView)view.findViewById(R.id.iv_ok);
holder.llayout = (LinearLayout)view.findViewById(R.id.ll_llayout_all);
view.setTag(holder);// 把筆記本裝兜裡了
}
holder.tv_select_device.setSelected(false);
// holder.llayout.setSelected(false);
holder.iv_ok.setVisibility(holder.iv_ok.INVISIBLE);
holder.llayout.setBackgroundResource(R.drawable.popupwindow_bg_selector);
if(a != -1&& position == a){
System.out.println("set COLOR===>");
holder.tv_select_device.setSelected(true);
holder.iv_ok.setVisibility(holder.iv_ok.VISIBLE);
holder.llayout.setBackgroundResource(R.drawable.popupwindow_bg_item_select);
}
<span style="white-space:pre"> </span>holder.tv_select_device.setText(testList.get(position).toString());
return view;
}}
class ViewHolder {
TextView tv_select_device;
ImageView iv_ok;
LinearLayout llayout;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
adapter.setSelectFlag(position);
}
}
這樣擡起時就會達到保持按下的顔色和背景..........
本文由NantiJey原創總結,如需轉載請标明出處 :http://blog.csdn.net/jss4j/article/details/43342265
資源下載下傳位址:http://download.csdn.net/detail/hiberatejss/8413061