2

リスト項目のカスタム ビューを追加したデフォルトの ListView がありますが、ほとんどの場合、これらのビュー内のボタンはクリックできません。ボタンがクリック イベントを受信すると Log.v を出力しますが、クリックを登録する前にボタンをほぼ 10 回タップする必要があります。

私が抱えている彼に関連する他の問題は、ボタンが押されたときにアニメーションが発生し、その下からメニューがスライドして表示されることです。現時点では、ビューのカスタム クラスを作成するのではなく、レイアウト インフレータを使用してビューの relativeLayout オブジェクトを取得するなど、いくつかの異なる方法を試しましたが、何も正しく機能していません。私も使用してみlistview.getAdapter().notifyDataSetChanged();ましたが、アニメーションが必要なときに拡張ビュー用のポップアップしかありません。

私はどこでも検索しましたが、可能な唯一の解決策は、独自のカスタムリストビューを書き直すか、スクロールビューでリニアレイアウトを使用することです。後者の方が簡単に思えますが、リストビューほど最適化されているとは思いません。

いくつかのコードを見る必要がある場合は、私に知らせてください...

ありがとう!

アップデート:

getView()はこれが含まれています:

    Holder hold;
    convertView = friends.get(position);
    hold = new Holder();
    hold.pos = position;
    convertView.setTag(hold);
    return convertView;

基本的ArrayList<RelativeLayout>に、現時点では、毎回新しいビューを作成する必要がなく、下にスクロールしてもアニメーションがアニメーションのままになるように、アダプターに渡します...

OnCreate()このアクティビティの内部ではArrayList<RelativeLayout>、この次のコードでそれを設定しますが、後で非同期タスクなどの別の方法を使用して、このビューにデータが含まれるようにする予定があるため、これは一時的なものです...

    RelativeLayout temp;
    for(int i=0; i<30; i++){
        temp = (RelativeLayout) inflater.inflate(R.layout.list_item, null);

        final LinearLayout extraListItemInfo = (LinearLayout) temp.findViewById(R.id.extraListItemInfo);

        Button infoBtn = (Button) temp.findViewById(R.id.infoBtn);
        infoBtn.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                Log.v("ListItem", "Button has been clicked... ");
                extraListItemInfo .setVisibility(View.VISIBLE);

                ExpandAnimation closeAnim = new ExpandAnimation(extraListItemInfo , animHeight);
                closeAnim.setDuration(750);
                closeAnim.setFillAfter(true);

                if(extraListItemInfo .getTag() == null || !extraListItemInfo .getTag().equals("expanded")){
                    extraListItemInfo .getLayoutParams().height = 0;
                    friendInfoList.startAnimation(closeAnim.expand());
                    extraListItemInfo .setTag("expanded");
                }else if(extraListItemInfo .getTag().equals("expanded")){
                    extraListItemInfo .startAnimation(closeAnim.collapse());
                    extraListItemInfo .setTag("closed");
                }
                //((BaseAdapter) listview.getAdapter()).notifyDataSetChanged(); i tried it here once but then left it
    //as the only action inside the listview's onitemclick()
            }
        });

        listItems.add(temp);
    }

これは私が使用しているリスト項目です:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@color/darkgrey"
    android:paddingBottom="5dp" >

    <LinearLayout
        android:id="@+id/extraListItemInfo "
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/listItemInfo"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="-10dp"
        android:background="@color/grey"
        android:orientation="vertical"
        android:visibility="gone" >


        <RelativeLayout
            android:id="@+id/RelativeLayout04"
            android:layout_width="match_parent"
            android:layout_height="@dimen/activity_list_height"
            android:layout_marginTop="5dp" >

            <ImageView
                android:id="@+id/ImageView04"
                android:layout_width="wrap_content"
                android:layout_height="25dp"
                android:layout_margin="5dp"
                android:src="@drawable/logo_d" />

            <TextView
                android:id="@+id/TextView04"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_toRightOf="@+id/ImageView04"
                android:text="TextView"
                android:textColor="@color/black"
                android:textSize="17dp" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/RelativeLayout03"
            android:layout_width="match_parent"
            android:layout_height="@dimen/activity_list_height" >

            <ImageView
                android:id="@+id/ImageView03"
                android:layout_width="wrap_content"
                android:layout_height="25dp"
                android:layout_margin="5dp"
                android:src="@drawable/logo_d" />

            <TextView
                android:id="@+id/TextView03"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_toRightOf="@+id/ImageView03"
                android:text="TextView"
                android:textColor="@color/black"
                android:textSize="17dp" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/RelativeLayout02"
            android:layout_width="match_parent"
            android:layout_height="@dimen/activity_list_height" >

            <ImageView
                android:id="@+id/ImageView02"
                android:layout_width="wrap_content"
                android:layout_height="25dp"
                android:layout_margin="5dp"
                android:src="@drawable/logo_d" />

            <TextView
                android:id="@+id/TextView02"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_toRightOf="@+id/ImageView02"
                android:text="TextView"
                android:textColor="@color/black"
                android:textSize="17dp" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/relativeLayout1"
            android:layout_width="match_parent"
            android:layout_height="@dimen/activity_list_height" >

            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="wrap_content"
                android:layout_height="25dp"
                android:layout_margin="5dp"
                android:src="@drawable/logo_d" />

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_toRightOf="@id/imageView1"
                android:text="TextView"
                android:textColor="@color/black"
                android:textSize="17dp" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/RelativeLayout01"
            android:layout_width="match_parent"
            android:layout_height="@dimen/activity_list_height">

            <ImageView
                android:id="@+id/ImageView01"
                android:layout_width="wrap_content"
                android:layout_height="25dp"
                android:layout_margin="5dp"
                android:src="@drawable/logo_d" />

            <TextView
                android:id="@+id/TextView01"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_toRightOf="@+id/ImageView01"
                android:text="TextView"
                android:textColor="@color/black"
                android:textSize="17dp" />
        </RelativeLayout>
    </LinearLayout>
        <RelativeLayout
        android:id="@+id/listItemInfo"
        android:layout_width="wrap_content"
        android:layout_height="95dp"
        android:background="@drawable/friend_cell_background2x"
        android:clickable="true" >


        <RelativeLayout
            android:id="@+id/leftLayout"
            android:layout_width="90dp"
            android:layout_height="match_parent" >
            <ImageView
                android:id="@+id/imgCompany"
                android:layout_width="60dp"
                android:layout_height="50dp"
                android:layout_centerHorizontal="true"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="10dp"
                android:scaleType="centerInside"
                android:src="@drawable/user2x" />
            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:scaleType="fitXY"
                android:src="@drawable/online_indicator2s" />

        </RelativeLayout>


        <LinearLayout
            android:id="@+id/linearLayout1"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:layout_marginTop="5dp"
            android:layout_toRightOf="@+id/leftLayout"
            android:background="@android:color/transparent"
            android:gravity="left|center"
            android:orientation="vertical"
            android:paddingLeft="5dp" >


            <TextView
                android:id="@+id/lblCompanyName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Contact Name"
                android:textColor="@color/white"
                android:textSize="18dp"
                android:textStyle="bold" >

            </TextView>


            <TextView
                android:id="@+id/lblReawrdDesc"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Last Played Offer"
                android:textColor="@color/white"
                android:textSize="17dp" >

            </TextView>
        </LinearLayout>

        <ImageView
            android:id="@+id/imageView4"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_marginRight="5dp"
            android:src="@drawable/facebook_btn2x" />
        <Button
            android:id="@+id/infoBtn"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentBottom="true"
            android:layout_alignRight="@+id/imageView4"
            android:background="@drawable/info_btn2x"
            android:clickable="true" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="13dp"
            android:layout_toLeftOf="@+id/infoBtn"
            android:text="Follows 30+"
            android:textColor="@color/white"
            android:textSize="11dp" />

        <Button
            android:id="@+id/button1"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="75dp"
            android:layout_height="20dp"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="10dp"
            android:layout_marginRight="10dp"
            android:layout_toLeftOf="@+id/textView2"
            android:background="@drawable/fan_btn2x"
            android:text="Fans 30+"
            android:textColor="@color/white"
            android:textSize="11dp" />


        <ImageView
            android:id="@+id/imageView5"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentTop="true"
            android:layout_toLeftOf="@+id/imageView4"
            android:src="@drawable/google_btn2x" />

    </RelativeLayout>

</RelativeLayout>

読みにくいレイアウトの問題で申し訳ありません...しかし、これが皆さんが私の問題を理解するのに役立つことを願っています...ありがとう

更新 2:

これらの回答はすべて何らかの形で役に立ちましたが、最初に修正しなければならない主な問題は、最初にそのlistItemから離れてスクロールし、次に戻ってボタンをクリックするまでボタンがクリックイベントを受信しない理由だと思いますもう一度...誰かがそれに対する解決策を見つけるのを助けることができれば、他のすべてははるかに簡単に解決できると思います...ありがとう...

要求されたスクリーンショットですが、このショットは samsung galaxy tab 10.1 で撮影されたことを思い出してください。この大きな画面に同じレイアウトを使用しているため、通常テストしている電話 (Motorola droid xルート化されておらず、スクリーンショットを撮ることができません...)

ここに画像の説明を入力

別の更新: 基本アダプターの代わりに ArrayAdapter を拡張することで、クリックとアニメーションをうまく機能させることができました。悲しいことに、リストの下半分しかクリックできないため、まだ問題が発生しています。リストの上半分は、非常にグリッチのあるクリック イベントで以前と同じように動作します... 今回何が起こっているかについてのアイデアはありますか? ありがとう...

4

6 に答える 6

3

これは実際には答えではありませんが、これを数回書き直した後、私が望んでいたとおりに機能するように修正することができました。

今回は、すべてのデータを各ビューから分離したままにし、各リスト項目をカスタム クラスにして、固有RelativeLayoutの.OnClickListenerinfoBtn

私のアダプターは、単に ArrayAdapter<> を拡張し、このgetView()メソッドをオーバーライドするようになりました。

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

    if(convertView != null && (convertView instanceof FriendListItem2))
        ((FriendListItem2) convertView).setFriendInfo(friends.get(position));
    else
        convertView = new FriendListItem2(getContext(), friends.get(position));

    return convertView;
}

最後に、このページのメイン アクティビティではListView、データを渡したアダプターを使用して を設定するだけです。

これは以前よりもはるかにきれいになり、コードを何度も書き直さなければよかったと思います。以前に問題が発生した理由はまだわかりませんが、誰かがこれから恩恵を受けることができれば幸いです。

以前のすべての提案に感謝します。

于 2012-06-20T20:16:16.207 に答える
2

子ビューが配置されている最上位のレイアウトでこのプロパティを使用してみてください。

android:descendantFocusability="blocksDescendants"

少しトリッキーですが、上記の行が機能しない場合は、ボタンから focusable=true と focusable="false" を削除することを切り替えてみることをお勧めします。それはうまくいくはずです。

乾杯!

于 2012-09-20T20:17:21.220 に答える
0

ListViewAdapterクラスのgetView()メソッドからボタンのクリックイベントを発生させることができます。この質問を参照してください

Android:ListViewのリストアイテムのボタンにonClickイベントを設定する方法

于 2013-01-02T09:26:16.947 に答える
0

私も同じ問題を抱えていました。Relative Layout から "android:clicable="true" " を取得してみてください。それを行うと、アクティビティは setOnClickListener をその RelativeLayout にすることを期待しています。それは私のために働いた

于 2012-07-24T10:42:26.617 に答える