2

リストビューにコンテキストアクションモードを追加しようとしていますが、選択に問題があります。作成するList1.setSelection(position)と何も選択されず、機能させてもList1.setItemChecked(position, true)フォントの色が変わるだけです。少しで、背景やもっと注目すべきものを変更したいのですが、選択を検出して手動で背景を変更する方法はありますか、それとも何かが足りませんか?

リスト:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <ListView
         android:id="@+id/list1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:choiceMode="singleChoice"
      android:drawSelectorOnTop="false">
    </ListView>
</RelativeLayout>

アダプター:

public class ServicesRowAdapter extends ArrayAdapter<String[]> {
    private final Activity context;
    private final ArrayList<String[]> names;
    static class ViewHolder {
        public TextView Id;
        public TextView Date;
        public RelativeLayout statusbar,bglayout;
    }

    public ServicesRowAdapter(Activity context, ArrayList<String[]> names) {
        super(context, R.layout.servicesrowlayout, names);
        this.context = context;
        this.names = names;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View rowView = convertView;
        if (rowView == null) {
            LayoutInflater inflater = context.getLayoutInflater();
            rowView = inflater.inflate(R.layout.servicesrowlayout, null);
            ViewHolder viewHolder = new ViewHolder();
            viewHolder.Id = (TextView) rowView.findViewById(R.id.idlabel);
            viewHolder.Date = (TextView) rowView.findViewById(R.id.datelabel);
            rowView.setTag(viewHolder);
        }

        ViewHolder holder = (ViewHolder) rowView.getTag();

        holder.Date.setText(names.get(position)[2]);
        holder.Id.setText(names.get(position)[1]);
        return rowView;
    }

}

レイアウトを使用して:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
    <TextView
        android:id="@+id/idlabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:gravity="right"
        android:text="@+id/idlabel"
        android:textSize="20dp"
        android:width="70dp" >

    </TextView>
        <TextView
        android:id="@+id/datelabel"
        android:layout_centerVertical="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@+id/datelabel"
        android:textSize="20dp"
        android:layout_marginLeft="90dp" >
    </TextView>

</RelativeLayout
4

1 に答える 1

6

これは、タッチ モードではフォーカスまたは選択がないためです。チェックされた状態を使用して正しい軌道に乗っています。さまざまな状態で状態ドローアブルを使用するだけです。

手順:

1)row_layout.xmlで

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/item_selector"
> 

2)次のように、新しいxmlファイルを作成します(行レイアウトで使用したものと名前を一致させます)。そこに16進数のカラーコードを単純に入れることはできませんか):

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

それでおしまい。直感的ではありませんが、「アクティブ化」は基本的に、チェック状態を有効にしたときに「チェック済み」を意味します。

その設定 (およびリスト行をチェック可能にできるようにする) を使用すると、チェック状態のときに背景が通常の状態から青色に変更されます。onTouch または onClick でその状態を設定するコードを追加すると、すべて設定されます。背景は、別のアイテムに触れるまでそのままです。

于 2012-04-11T13:36:03.730 に答える