2011-08-01 13 views
3

私は、TextView、ImageView、ImageButtonからなるリストビューとカスタムレイアウトを持っています。イメージボタンをRadioButtonのように動作させたいしかし、私のonListItemClickイベントは呼び出されていません。onListItemClickがアンドロイドで呼び出されていませんか?

@Override 
protected void onListItemClick(ListView listView, View v, int position, long id) { 
    super.onListItemClick(listView, v, position, id); 
    ImageButton choice = (ImageButton)v.findViewById(R.id.ImageButton); 
    choice.setImageResource(R.drawable.radio_selected); 
} 

、など

public class MyListAdapter extends BaseAdapter { 

    Context context; 
    ArrayList<String> text; 
    ArrayList<String> Count; 

    int count; 

    public MyListAdapter(Context ctx, ArrayList<String> text, ArrayList<String> Count) { 
     this.context = ctx; 
     this.textAnswers = text; 
     this.optionCount = Count; 
    } 

    @Override 
    public int getCount() { 
     return Count.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

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

     if(convertView == null) { 
      convertView = LayoutInflater.from(context).inflate(R.layout.custom_layout, null); 
     } 

     ImageButton choice = (ImageButton)convertView.findViewById(R.id.ImageButton); 
     if(imageChoice != null) { 
      choice.setImageResource(R.drawable.radio_unselected); 

     } 

     TextView txt = (TextView)convertView.findViewById(R.id.TextView); 
     txt.setText(Count.get(position)); 

     TextView txtText = (TextView)convertView.findViewById(R.id.TextViewAnswer); 
     txtText.setText(textAnswers.get(position)); 

     return convertView; 
    } 
} 

そして、私のonListItemClick今私のIMAGEBUTTONにラジオボタンのような振る舞いを与えるために、いずれかの助けをplzは。私が忘れた最も重要なのは、私のonListItemClickが呼び出されていないということです。 また、custom_layoutのすべてのコントロールのandroid:focusable = "false" android:focusableInTouchMode = "false" android:clickable = "false"を設定しました。 ありがとうございます。

+0

あなたは 'setOnItemClickListener'を呼び出しましたか? – MByD

+0

@MByDいいえ、私はsetOnItemClickListenerと呼ばれませんでした..私はする必要がありますか? – Panache

+1

はい、それをリスナーとして設定する必要があります。それ以外の場合は、どのように呼び出されますか? – MByD

答えて

2

メインアクティビティのListViewにsetOnItemClickListenerを追加する必要があります。そうしないと、itemClickを呼び出すことはありません。

のOnCreate()メソッド:インスタンスの

ListView lv = (ListView) findViewById(R.id.listview1); 

lv.setOnItemClickListener(this); 

//以下のメソッドを作成し、活動が動作するはずです:)

2
public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
//set action here 
} 

をonitemclicklistener実装してみましょう

あなたのアクティビティがListActivityで、リストビューのid = @android:id/lの場合リスナーを設定しなくてもonListItemClickよりもistが呼び出されます。

+0

はい、私は単純なアダプタで別のアクティビティのリストをもう1つ持っています。ここで私のonListItemClickが呼び出されます。しかし、なぜそれがBaseAdapterのリストに呼ばれないのでしょうか? – Panache

+0

カスタムレイアウトからイメージボタンを削除すると、onListItemClickが呼び出されます。今私はimagebuttonのために欠けている? – Panache

0

これらの値をImageButtonのXMLに設定すると、正常に動作するはずです。

android:focusable="false" 
android:focusableInTouchMode="false" 
+1

全く動作しませんでした –

1

リスト項目ビューにandroid:descendantFocusability="blocksDescendants"が設定されている必要があります。それは私のためにそれを解決しました。

... 
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:descendantFocusability="blocksDescendants"> 
... 
関連する問題