Listview 保持選中的item高亮,即使listview失去焦點

一、首先創建listview的item佈局文件item_list.xml,內容如下。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/item_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:layout_weight="1"
        android:gravity="center"
        android:minHeight="55dp"
        android:textSize="25sp" />
</LinearLayout>

二、在自己界面中放置Listview控件。定義如下:

<ListView
                    android:id="@+id/select_door_name"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_above="@id/led_open"
                    android:layout_alignParentTop="true"
                    android:cacheColorHint="#00000000"
                    android:fadeScrollbars="false"
                    android:focusable="true"
                    android:focusableInTouchMode="true"
                    android:background="#00000000"
                    >
                </ListView>

三、爲listview設計一個adapter,取名爲DoorSelectListAdapter,具體如下:

package com.beition.welcomewindow;


import java.util.ArrayList;


import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;


import com.beition.BTLock.R;




public class DoorSelectListAdapter extends BaseAdapter
{
    private Context context;
    private ArrayList<String> testList;
    private int selectedIndex;
    private int selectedColor = Color.parseColor("#ffcc99");


    public DoorSelectListAdapter(Context ctx, ArrayList<String> testList)
    {
        this.context = ctx;
        this.testList = testList;
        selectedIndex = -1;
    }


    public void setSelectedIndex(int ind)
    {
        selectedIndex = ind;
        notifyDataSetChanged();
    }


    @Override
    public int getCount()
    {
        return testList.size();
    }


    @Override
    public Object getItem(int position)
    {
        return testList.get(position);
    }


    @Override
    public long getItemId(int position)
    {
        return position;
    }


    private class ViewHolder
    {
        TextView tv;
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        View vi = convertView;
        ViewHolder holder;
        if(convertView == null)
        {
        //其中R.layout.item_list爲listview的item的佈局文件,定義如一中所述
        vi = LayoutInflater.from(context).inflate(R.layout.item_list, null);
            holder = new ViewHolder();

            //其中R.id.item_name爲listview的Item的ID
            holder.tv = (TextView) vi.findViewById(R.id.item_name);


            vi.setTag(holder);
        }
        else
        {
            holder = (ViewHolder) vi.getTag();
        }


        if(selectedIndex!= -1 && position == selectedIndex)
        {
            holder.tv.setBackgroundColor(Color.RED);
        }
        else
        {
            holder.tv.setBackgroundColor(selectedColor);
        }
        holder.tv.setText(testList.get(position).toString());


        return vi;
    }


}

四、new一個自定義的adapter對象,如下

private DoorSelectListAdapter selectDoorNameAdapter;

selectDoorNameAdapter = new DoorSelectListAdapter(this,storeDoorInf);

五、對listview傳遞adapter對象,並設置按下的監聽器

private ListView select_door_nameList;

select_door_nameList = (ListView)this.findViewById(R.id.select_door_name);

select_door_nameList.setAdapter(selectDoorNameAdapter);
select_door_nameList.setOnItemClickListener(selectDoorNameClickListner);

//添加幾個數據

storeDoorInf.add("門鎖1");
storeDoorInf.add("門鎖2");
storeDoorInf.add("門鎖3");
storeDoorInf.add("門鎖4");
selectDoorNameAdapter.notifyDataSetChanged();

六、在listview的選中事件的監聽器中高度選中的Item

OnItemClickListener selectDoorNameClickListner = new OnItemClickListener(){


@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub

selectDoorNameAdapter.setSelectedIndex(arg2);
}

};

實際效果如下:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章