0

カスタムリストアイテムを含むListViewがあります。各リストアイテムは、2つの線形レイアウトが隣り合って構成されています。LinearLayout 1 | LinearLayout 2 |

両方のLinearLayoutの状態リストドローアブルを宣言しました。state_pressedでは、LinearLayoutの背景を変更しています。

そしてここに問題があります-ユーザーがLinearLayout2をタップすると、LinearLayout2の背景のみが変更され、LinearLayout1の背景は変更されないままになります。一方、ユーザーがLinearLayout1をタップした場合は、LinearLayout1の背景のみを変更する必要があります。しかし、ユーザーが両方のLinearLayoutのいずれかをタップすると、両方の背景が変更されます。

LinearLayout2をタップしたときの動作は、onListItemClick()のようになりますが、ユーザーがLinearLayout1をタップしたときは、ダイアログが表示されます(これが重要な場合)。

背景の変更の問題をどのように解決できますか?フォーカス可能でクリック可能なオプションで遊んでみました。両方のLinearLayoutsにclickable=trueを設定した場合、LinearLayout2の子(TextViews)は色を変更しません(TextViewsはテキストの色を変更する必要があります)。

ありがとうございました!

4

2 に答える 2

0

BaseAdapterをextendsとして使用している場合、単一のソリューションだと思います

まず、xmlファイル内の両方のレイアウトに一意のIDを指定し、追加します

android:clickable="true"

あなたの方法で

 public View getView(int position, View convertView, ViewGroup parent) {

あなたがそれらのビューを取得しているとき

 holder.layout1_name=(LinearLayout)view.findViewById(R.id.layout1);
 holder.layout1_name.setOnClickListener( clicklayout1);
 holder.layout2_name=(LinearLayout)view.findViewById(R.id.layout2);
holder.layout2_name.setOnClickListener( clicklayout2);

それらにクリックリスナーを追加します

private OnClickListener clicklayout1 = new OnClickListener() {
    public void onClick(View v) {

         //Do what you want to do here
    }
};


private OnClickListener clicklayout2 = new OnClickListener() {
    public void onClick(View v) {

         //Do what you want to do here
    }
};

これはあなたを助けるかもしれません

于 2011-10-04T14:12:52.797 に答える
0

これは、リストビューを使用する場合、背景が正しく機能するように、XMLの一部のタグを変更して背景を透明にする必要があるためです。

これをListViewXMLコードに追加します。

android:cacheColorHint="#00000000"

ListViewの背景を透明に設定します。

于 2011-10-04T13:52:39.640 に答える