0

リストビューアイテムでクリックイベントを設定する際に問題が発生しました。

これは、デフォルトの状況でリストが表示される方法です。

ここに画像の説明を入力してください

これは、赤い画像を押したときの外観です(赤が青に変わります)。 ここに画像の説明を入力してください

これは、リスト項目を押したときです。 ここに画像の説明を入力してください

ご覧のとおり、ボタンを押さなくても、赤い画像も青に変わります。私が欲しいのは、リスト項目を押しても赤い画像に変化がなく、同じままであるということです。

android:drawSelectorOnTop="true"リストビューセクションのxmlファイルに追加しようとしましたが、機能しませんでした。また、セレクターパラメーターを使用して修正しようとしましたが、まだ成功しませんでした。

私はいくつかのコードをアップロードしました。次のセクションは異なるxmlファイルにあるので、混乱しないでください。

編集: OSアイテムリストの背景色を使用したいのですが、自分の色ではなく、android:listSelectorすでに使用している色を使用したいと思います。

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true" android:drawable="@color/blue" />
    <item android:drawable="@color/red"/> 

</selector>

-----------------------新しいファイル------------------------- -------

<ListView android:id="@+id/list_theme"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_above="@id/contbtn_themelist"
    android:stackFromBottom="false"
    android:transcriptMode="disabled"/>

-----------------------新しいファイル------------------------- -------

<RelativeLayout android:id="@+id/edit_back"
    android:layout_width="80dp"
    android:layout_height="77dp"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_alignParentBottom="true"
    android:background="@drawable/edit_skin_selector2"  >

    <ImageView
        android:id="@+id/skinEdit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:scaleType="fitXY"
        android:src="@android:drawable/ic_menu_edit"
        android:layout_centerInParent="true" />
</RelativeLayout>

編集: row.xml

    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:paddingBottom="5dip"
        android:paddingLeft="2dip"
        android:paddingRight="2dip"
        android:paddingTop="5dip" >

        <ImageView
            android:id="@+id/itemlist_checkedd"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:adjustViewBounds="true"
            android:src="@drawable/ic_checkitem" />

        <ImageView
            android:id="@+id/skinpreview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@id/itemlist_checkedd"
            android:scaleType="fitXY" />

        <RelativeLayout android:id="@+id/edit_back"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:background="@drawable/edit_skin_selector2"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true">

            <ImageView 
                android:id="@+id/skinEdit"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:src="@android:drawable/ic_menu_edit"
                android:layout_centerInParent="true" />
        </RelativeLayout>

        <ImageView
            android:id="@+id/separator"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginRight="5dip"
            android:layout_toLeftOf="@id/edit_back"
            android:src="@drawable/separator" />

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="2dip"
            android:layout_marginRight="15dip"
            android:layout_toLeftOf="@id/separator"
            android:layout_toRightOf="@id/skinpreview"
            android:textAppearance="?android:attr/textAppearanceLarge" />

 </RelativeLayout>

どんな助けでも素晴らしいでしょう、ありがとう。

4

6 に答える 6

4

私もこの問題に遭遇しました。ここのテクニックを使用して解決しました:

http://android.cyrilmottier.com/?p=525

「すべてを押さないでください!」という段落を見てください。

于 2012-04-23T18:24:08.183 に答える
1

私は以前にこの解決策を見つけました..私はリンクを持っていませんが、あなたはこれをしなければなりません。ボットンを含むlinearlayoutのカスタムクラスを作成し、setPressed状態をオーバーライドして何もしないようにします。

public class UnpresseableLinearLayout extends LinearLayout
{
    public UnpresseableLinearLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

@Override
    public void setPressed(boolean pressed)
    {
        // Do nothing here. Specifically, do not propagate this message along
        // to our children so they do not incorrectly display a pressed state
        // just because one of their ancestors got pressed.
    }
}

この場合、android:duplicateParentState = "false"は機能しないため、これで問題が解決します。

次に、xml内のlinearlayoutを、プレスアクションを受信できないこのレイアウトに置き換えます

編集:申し訳ありませんが、RelativeLayoutを使用しているのを見ましたが、同じだと思います。

于 2012-04-23T18:36:00.483 に答える
1

android:duplicateParentState="false"親の描画可能状態をその子に使用しないことを示すために、using を試す必要があります。

<ImageView
    android:id="@+id/skinEdit"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:scaleType="fitXY"
    android:src="@android:drawable/ic_menu_edit"
    android:layout_centerInParent="true" 

    android:duplicateParentState="false"
   />

アップデート

ボタンの直接の親をクリックできないようにします。つまりandroid:clickable="false"、row.xml に追加して、問題が解決するかどうかを確認します。これで、アイテムをクリックしてもボタンの状態は変わりません。しかし、ボタンのクリックはまだ機能するはずです。

アップデート

        <ImageButton 
            android:id="@+id/skinEdit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"

            android:src="@android:drawable/ic_menu_edit"
            android:scaleType="center"
            android:background="@android:drawable/state_redblue_drawable"
            android:padding=10dp
            android:clickable="true"/>
于 2012-04-21T10:44:51.863 に答える
0

imageViewをクリック可能にしてみてください...

<ImageView
        android:id="@+id/skinEdit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:scaleType="fitXY"
        android:src="@android:drawable/ic_menu_edit"
        android:layout_centerInParent="true"
           android:focussable="false"
           android:focussableInTouchMode="false"
           android:clickable="true" />

また..

セレクターの状態を

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_selected="true" android:drawable="@color/blue" />
    <item android:drawable="@color/red"/> 

</selector>
于 2012-04-18T06:16:21.137 に答える
0

リストをsimpleAdapterに接続するために何を使用していますか。あなたが言っていることを達成するには、BaseAdapter を拡張し、そのクラスの getView イベントで背景画像を変更する新しいクラスが必要です。

次に、メイン アクティビティで onlistItemClick を設定して、リスト アイテムのクリック イベントを処理できます。

于 2012-04-23T12:16:04.643 に答える
0

Ok。まず返信が遅くなり申し訳ありません。

解決策に進む前に、あなたの質問から得たものを見てみましょう。

あなたが望むのは、List-itemsをクリックしたときにその赤い画像が青に変換されず、ユーザーが赤い画像をクリックすると赤に変換されるはずです。しかし、リスト項目全体ではそうではありませんか???

もしそうなら、それ以上のことは何もありません。

セレクターは付けません。セレクターは基本的に、その特定のビューをクリックしているときに背景の色を変更したいときのためのものです。

はい、ユーザーがクリックしている間に RedImage の色を変更したい場合は、セレクターを使用しないでください。ただし、実行時にその画像の色を変更するだけです。

など:

@Override 
        public void onClick(View view) { 
                 YOUR_VIEW.setBackgroundColor(0xffff0000);

        } 

それがあなたを助けることを願っています。ご希望どおりに動作しない場合は、お知らせください。

私はあなたを助けたいです。

楽しみ。:)

于 2012-04-21T06:10:16.150 に答える