0

カスタムリストビューアイテムのクリックに問題があります。

私のアクティビティでは、ボタンとカスタムListViewがあり、ボタンをクリックすると各アイテムの左側にチェックボックスが表示され、ボタンをクリックするとチェックボックスが消えます。デフォルトでは、アイテムをクリックするとToast1が表示されます。ボタンをクリックすると(チェックボックスが有効になっている場合)、Toast2が表示されます。したがって、ボタンはトグルボタンのように機能します。

だから私はListView.onitemclickListenerToast1を表示するためにActivityで、そしてToast2を表示するためconvertView.setOnClickListenerにgetViewで書いた。

getView()で、私は次のように書いています:

if(myFlag)
{
  convertView.setOnClickListener ... 
  {
      display Toast2
  }
}

ここで、myFlagはトグルボタンに基づいてtrue/falseに設定されます。

ただし、トグルボタンをクリックしてリストビューアイテムをクリックすると、Toast1が表示される場合とToast2が表示される場合があります。

4

3 に答える 3

0

実行時に異なるOnClickListenerを追加すると、特にgetView()メソッドに関連付けた場合に、いくつかの問題が発生する可能性があります。

単一のonClickListenerを使用し、そこでフラグを確認すると、希望どおりに機能するはずです。

擬似コード:

    convertView.setOnClickListener ... 
  {
       if(myFlag){
       hide checkbox;
       display Toast2;
       myFlag =false;
     }
      else {
       show checkbox;
       display Toast 1;
       myFlag =true;
     }

}
于 2012-09-03T14:40:19.040 に答える
0

ついに私はこれを自分で解決しました。getView()メソッドでconvertViewのsetclickable()をtrue/falseに設定するだけです。trueに設定するとToast2が表示され()、Falseに設定するとToast1が表示されます。

于 2012-09-03T17:31:56.010 に答える
0

アイテムの位置を取得するためにsetTag()/ getTag()メソッドを使用します。リストアダプタのgetView()メソッドで、 setTag( "position")メソッドを使用して、アイテムの位置を行アイテム(この場合はボタン)のタグとして設定します。
任意の行のボタンがクリックされると、そのボタンに対してonClick()メソッドが呼び出され、onClick()メソッドでgetTag()メソッドを使用して位置を取得できます。すべての行ボタンに対してonClickルーチンと同じ方法を使用します。

サンプルコード:リストアイテムは次のようになります

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<Button
    android:id="@+id/button1"
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="117dp"
    android:background="@drawable/grad"
    android:onClick="onButtonClick" />

getView()メソッドは次のようになります。

public View getView (int position, View convertView, ViewGroup parent) {
    ...
    ...
    button.setTag(position);
    ...
}

onClickルーチンは次のようになります。

public void onButtonClick(View v) {
    String tag = v.getTag().toString();
    if(tag != null) {
         int position = Integer.parseInt(tag);
    }
    ...
    ...
}
于 2012-09-03T17:51:56.540 に答える