0

通常ListView、単純なArrayAdapterで作成するとき。このハイライト機能は、追加の設定なしで自動的に取得されます。ただし、ListViewカスタムでこれを作成すると、CursorAdapterこの機能が欠落しているように見え、解決する方法が見つかりません。

これが私のカスタム CursorAdapter public class RecentCallAdapter extends CursorAdapter {

    private final String tag = this.getClass().getSimpleName();

    public RecentCallAdapter(Context context, Cursor c, int flags) {
        super(context, c, flags);
        // TODO Auto-generated constructor stub
    }

    private static class ViewHolder {
        TextView name;
        TextView date;
        int nameCol;
        int dateCol;
        int numberCol;
        Calendar cal;
    }

    @Override
    public void bindView(View v, Context context, Cursor cursor) {
        // TODO Auto-generated method stub

        ViewHolder holder = (ViewHolder) v.getTag();
        if (holder == null) {
            holder = new ViewHolder();
            holder.name = (TextView) v.findViewById(R.id.recentcall_item_name);
            holder.date = (TextView) v.findViewById(R.id.recentcall_item_date);
            holder.nameCol = cursor.getColumnIndex(Calls.CACHED_NAME);
            holder.dateCol = cursor.getColumnIndex(Calls.DATE);
            holder.numberCol = cursor.getColumnIndex(Calls.NUMBER);
            holder.cal = Calendar.getInstance();
            v.setTag(holder);
        }

        String name = cursor.getString(holder.nameCol);
        if(name == null){
            name = cursor.getString(holder.numberCol);
        }       
        holder.name.setText(name);

        holder.cal.setTimeInMillis(Long.valueOf(cursor.getString(holder.dateCol)));
        holder.date.setText(Utility.calculateTimePass(holder.cal.getTime()));
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        // TODO Auto-generated method stub
        LayoutInflater inflater = LayoutInflater.from(context);
        View v = inflater.inflate(R.layout.recentcall_item, parent, false);
        bindView(v, context, cursor);
        return v;
    }

これを解決する方法はありますか?感謝。

4

3 に答える 3

1

セレクターを使用する

    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
     <item android:state_focused="true" android:drawable="@android:drawable/list_selector_background">

     </item>  
<item android:state_focused="true" android:state_selected="true" android:drawable="@android:drawable/list_selector_background"> 

     </item> 
    </selector>

セットセレクターのリストビュータグでこのコードを使用します

android:drawSelectorOnTop="true"
android:listSelector="@drawable/selector"
于 2013-06-25T08:32:06.993 に答える
0

私のために働いている例を挙げます。

押したときにリストビュー項目の色を保持するには、次の行を

リストビューのレイアウト:

android:background="@drawable/bg_key"

次に、次のように描画可能なフォルダーに bg_key.xml を定義します。

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

最後に、これをリストビュー onClickListener に含めます。

listView.setOnItemClickListener(new OnItemClickListener() {

 @Override
 public void onItemClick(AdapterView<?> parent, View view, int position,long arg3) {
    view.setSelected(true);
    ...
}
}

このようにして、いつでも 1 つのアイテムだけがカラー選択されます。res/values/colors.xml で色の値を次のように定義できます。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="pressed_color">#4d90fe</color>
    <color name="default_color">#ffffff</color>
</resources>
于 2013-06-25T08:26:40.690 に答える
0

カスタムレイアウトで、背景を次のように設定しますandroid:background="@drawable/bkg"

bkg.xml

   <?xml version="1.0" encoding="utf-8"?>
  <selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_pressed="true" 
    android:drawable="@drawable/pressed" />
  <item  android:state_focused="false" 
    android:drawable="@drawable/normal" />
  </selector>

通常の.xml

  <?xml version="1.0" encoding="UTF-8"?> 
  <shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"> 
  <solid android:color="#10EB0A"/>    
  <stroke android:width="3dp"
        android:color="#0FECFF" />  
  </shape>   

押された.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="rectangle"> 
<solid android:color="#FF1A47"/>    
<stroke android:width="3dp"
        android:color="#0FECFF"/>
</shape>  
于 2013-06-25T08:27:34.213 に答える