Button
の中にListView
を表示したい。目標はListView
行またはボタンをクリックすることです。
詳細情報が表示されている行をクリックします。下部にあるボタンをクリックしてください。
GMAILアプリと同じです。
右側にはチェックボックスがあり、下部のチェックボックスをクリックすると、ボタンバーが表示されます。
私の問題は、ボタンをListView
に挿入した後、ボタンをクリックできないことです。ボタンllButton.setClickable()
からLinearLayout
に追加すると動作します。しかし、ボタンのみ。 ListView
自体はクリックに反応しなくなりました!
この例 を試しました。
上記と同じ問題...
カスタムアダプタを使用している場合、ListView内のボタンクリックは機能しないため、次のコードを使用してOnItemClickListener
を確認してください。
listId.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> list, View v, int pos, long id) {
// Your code for item clicks
}
});
これを明確にするために-そして誰もこの単純なことを言っていないようです-一方で、リストビューと連動してフォーカス可能なボタンを動作させることは許可されていませんが、これに対するはるかに簡単なソリューションがあります。
受け入れられた答えは与えられたものです-リスト項目のクリックリスナーを設定するときは常にそうするべきです、それはOPがそれを知らなかったことは愚かなことです。
リストアイテムとしてXMLレイアウトを使用している場合は、ボタンに次の属性を設定するだけで、リストアイテムもクリック可能になります。
Android:focusable="false"
以下の行をリストアイテム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>
ボタンまたはリストアイテムがクリックされたときにイベントがトリガーされるようにするには、次の操作を実行できます。
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);
}
}
私の場合、この属性を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);
.....
}