web-dev-qa-db-ja.com

ListViewとListView内のボタン

Buttonの中にListViewを表示したい。目標はListView行またはボタンをクリックすることです。

詳細情報が表示されている行をクリックします。下部にあるボタンをクリックしてください。

GMAILアプリと同じです。

右側にはチェックボックスがあり、下部のチェックボックスをクリックすると、ボタンバーが表示されます。

私の問題は、ボタンをListViewに挿入した後、ボタンをクリックできないことです。ボタンllButton.setClickable()からLinearLayoutに追加すると動作します。しかし、ボタンのみ。 ListView自体はクリックに反応しなくなりました!

この例 を試しました。

上記と同じ問題...

57
chrisonline

カスタムアダプタを使用している場合、ListView内のボタンクリックは機能しないため、次のコードを使用してOnItemClickListenerを確認してください。

listId.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   public void onItemClick(AdapterView<?> list, View v, int pos, long id) {
      // Your code for item clicks
   }
});
8
Venky

これを明確にするために-そして誰もこの単純なことを言っていないようです-一方で、リストビューと連動してフォーカス可能なボタンを動作させることは許可されていませんが、これに対するはるかに簡単なソリューションがあります。

受け入れられた答えは与えられたものです-リスト項目のクリックリスナーを設定するときは常にそうするべきです、それはOPがそれを知らなかったことは愚かなことです。

リストアイテムとしてXMLレイアウトを使用している場合は、ボタンに次の属性を設定するだけで、リストアイテムもクリック可能になります。

Android:focusable="false"

120
flagoworld

以下の行をリストアイテムXMLに追加します。

Android:descendantFocusability="blocksDescendants"

次に、リストアイテムは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:descendantFocusability="blocksDescendants"
Android:layout_height="wrap_content" >

    // Your layout objects here

</RelativeLayout>
18
Faruk Toptas

ボタンまたはリストアイテムがクリックされたときにイベントがトリガーされるようにするには、次の操作を実行できます。

OnItemClickのみを処理します。

mListView.setOnItemClickListener(new ListView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> a, View v, int i, long l) {
        // handle click here
    }
);

アダプターで、ボタンをクリック可能/フォーカス不可に変更します(または、代わりにxmlファイルでこれを行います)。

public class MyAdapter extends BaseAdapter {
    ...
    public View getView(int position, View convertView, ViewGroup parent) {
        .....  
        Button btn = view.findViewById(R.id.button);
        btn.setFocusable(false);
        btn.setClickable(false);               
    }
}
7
beta

私の場合、この属性をlistViewに追加する必要がありました。

<ListView
...
Android:clickable="true"
...
</ListView>

また、アダプターでは、ボタンビューでクリックリスナーを追加するだけです。

wrapper.getButtonHi().setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            DebugUtils.logDebug("Clickeado :: "+ mContact.getUserId());
        }
});

変数を最終的に設定することが重要です:

public View getRowView(final int position, View convertView, ViewGroup parent) {
    final BrowseContactItemWrapper wrapper;
    final UserModel mContact = lstContact.get(position);
    .....
}
0
Kokusho