質問

私は持っている ListView カスタムで Adapter どちらが供給しますか ViewListView この上:

   public View getView(int position, View convertView, ViewGroup parent)
   {
        RelativeLayout.LayoutParams lineParams;
        RelativeLayout line=new RelativeLayout(context);

        TextView tv=new TextView(context);
        tv.setText("Text in postion="+i);
        lineParams=new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        lineParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        line.addView(tv, lineParams);
        lineParams.addRule(RelativeLayout.CENTER_IN_PARENT);

        //checkbox
        CheckBox checkBox=new CheckBox(context);
        lineParams=new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        lineParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        lineParams.addRule(RelativeLayout.CENTER_IN_PARENT);
        line.addView(checkBox, lineParams);
        return line;
    }

そして内部のどこか ListView あります setOnItemClickListener(), 、アイテムをクリックするイベントを傍受する必要があります。私の問題、アイテムにチェックボックスを追加しようとするときはいつでも - 私は自分の尊敬を得られません ListView. 。スキップしたら CheckBox またはその他 Button できます。

私はこの問題に本当に固執しています。私はあらゆる種類のレイアウトを試してみました。ように見えます CheckBox 干渉する ListView アイテムクリックイベント。

克服する方法はありますか?

役に立ちましたか?

解決

ListView自体の代わりに、この行をアイテムビューに追加するだけです

android:focusable="false"

これについての詳細を確認してください Android Custom ListViewアイテムをクリックできません

他のヒント

リスト項目内にImageButtonsがある場合は、追加する必要があります。

android:descendantFocusability="blocksDescendants"

ルートリストアイテム要素[ルートレイアウトなど]。

次に、リスト項目の各画像ボタン内で、次のことを追加する必要があります。

android:focusableInTouchMode="true"

これは私のために機能しました - しかし、私は標準ボタンではなく、ImageButtonsを使用していました。

また、設定しようとしたのと同じ問題に直面しています android:focusable="false" listViewには機能しませんが、これをListViewアイテムに追加します。リストビューアイテムのように、問題を作成しているトグルボタンがあります。 android:focusable="false" アイテム]の[リスト]ボタンを切り替えて[リスナー]をクリックして、再び作業を開始します

ListViewに次の行を追加します

android:choiceMode="singleChoice"

または、レイアウトテキストフィールドに次の行を設定してください

android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false"

また、リストビューにボタンの問題がありました。残念ながら、私のアダプター内のすべてのオブジェクトのフォーカスを偽に設定するだけでは、私にとっては機能しませんでした。

私は今回避策を持っています。

アダプターで、まだ行っていない場合は、ボタン(または他のクリック可能なオブジェクト)のonClickListenerを作成します。そのonclickListenerでは、onitemclicklistenerを自分で呼びます。

public void onClick(View v) {
    mOnItemClickListener.setOnItemClick(mListView, v, vPos, vId);
}

これは、親リストビューとonitemclickListenerの両方にアダプターアクセスを提供する必要があることを意味します。

ListViewアイテムにOntoucheventを書いて、適切なTouchEventを子供のビュー、ボタンに送信することを検討できます。

上記のソリューションはどれも機能しないことを知っています。XML属性を変更しようとしましたが、それらはうまくいきませんが、新しい方法で実装しました。方法は次のとおりです。

作成します インターフェース CheckBoxOnCheckListener メソッド付き onCheckBoxChecked 必要なパラメーターを渡し、インターフェイスを実装します CheckBoxOnCheckListener あなたの中で アクティビティ また 断片 含む リストビュー.

次にアダプターで、宣言します mListener なので CheckBoxOnCheckListener, 、そしてこれをアダプターのコンストラクターへのパラメーターとして渡します fragment/activity そしてそれをキャストします CheckBoxOnCheckListener に割り当てます mListener.

次のセット mListener なので itemView.onClick また CheckBox.onCheckCheckedListeneronCheckChanged メソッド呼び出し mListener.onCheckBoxChecked.

それでおしまい。それは間違いなく機能します、それは私のために働きました。コードだけのPMの場合。

使用している場合 ListViewActivity, 、セットアップがあることを確認してください setOnItemClickListener()

myListView.setOnItemClickListener(this); // if your activity implement OnItemClickListener
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top