2012-04-27 13 views
1

私はリストビューを拡張するクラスを持っています。私はそのリストビューにonitemclicklistenerを持つ必要があります。次のコードは機能しません。クリックリスナーが機能していないことを意味します。これを解決するには?リストビューでonitemclicklistenerを設定する方法

listview.xml

<ListView 
android:id="@android:id/list" 
android:layout_width="match_parent" 
android:layout_height="fill_parent" 
android:layout_marginBottom="47dip" 
android:layout_marginTop="47dip" > 
</ListView> 

elements.xml

<RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="46dp" 
     android:gravity="center" > 

     <ToggleButton 
      android:id="@+id/toggleButton1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentTop="true" 
      android:text="ToggleButton" 
      android:textOff="Inactive" 
      android:textOn="Active" /> 

     <TextView 
      android:id="@+id/label_note" 
      android:layout_width="wrap_content" 
      android:layout_height="30dp" 
      android:layout_centerVertical="true" 
      android:layout_marginRight="38dp" 
      android:layout_marginLeft="2dip" 
      android:layout_toRightOf="@+id/check_note" 
      android:text="@+id/label" 
      android:textSize="25px" /> 

     <CheckBox 
      android:id="@+id/check_note" 
      android:layout_width="30dip" 
      android:layout_height="30dip" 
      android:layout_alignParentLeft="true" 
      android:layout_centerVertical="true" 
      android:visibility="gone" 
      android:button="@drawable/customdrawablecheckbox" /> 

    </RelativeLayout> 

List.java

public class List extends ListActivity{ 
.... 

public void onCreate(Bundle icicle) { 

     this.setContentView(R.layout.listview); 
     super.onCreate(icicle); 



} 
ArrayAdapter<ListModel> adapter = new InteractiveArrayAdapter(
       this, getModel(), false); 
     setListAdapter(adapter); 

     final ListView list1 = getListView(); 
     list1.setItemsCanFocus(true); 
     list1.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) { 
       // TODO Auto-generated method stub 
      // HashMap<String, String> o = (HashMap<String, String>) list1.getItemAtPosition(pos);     
       Toast.makeText(ContactsNoteList.this, "ID '" +list.get(pos).getName()+" "+list.get(pos).getId().toString() + "' was clicked.", Toast.LENGTH_LONG).show(); 

      } 

     }); 

..} 

    private List<ListModel> getModel() { 


    for (int i=0;i<3;i++)  
list.add(get("Elem"+i.toString(),i); 
      } 
     } 

     return list; 
    } 

    private ListModel get(String s1,int Id) { 
     return new ListModel(s1,Id); 
    } 

InteractiveArrayAdapter.java

InteractiveArrayAdapter extends 
     ArrayAdapter<ListModel> { 

    private final List<ListModel> list; 
    private final Activity context; 
    private boolean visibility; 
    public InteractiveArrayAdapter(Activity context, List<ListModel> list,boolean visibility) { 
     super(context, R.layout.elements, list); 
     this.context = context; 
     this.list = list; 
     this.visibility=visibility; 

    } 


    static class ViewHolder { 
     protected TextView text; 
     protected CheckBox checkbox; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = null; 
     if (convertView == null) { 
      LayoutInflater inflator = context.getLayoutInflater(); 
      view = inflator.inflate(R.layout.elements, null); 


      final ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.text = (TextView) view.findViewById(R.id.label_note); 
      viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check_note); 
      viewHolder.checkbox 
        .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 



@Override 
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
           ListModel element = (ListModel) viewHolder.checkbox.getTag(); 
           element.setSelected(buttonView.isChecked()); 

          } 
         }); 
      view.setTag(viewHolder); 
      viewHolder.checkbox.setTag(list.get(position)); 
     } else { 
      view = convertView; 
      ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position)); 
     } 

     ViewHolder holder = (ViewHolder) view.getTag(); 
     holder.text.setText(list.get(position).getName()); 
     holder.checkbox.setChecked(list.get(position).isSelected()); 
     if (visibility==true) 
     holder.checkbox.setVisibility(View.VISIBLE); 
     else 
      holder.checkbox.setVisibility(View.INVISIBLE); 
     return view; 
    } 
} 

は助けを必要としています。どうも。

view.setOnClickListener(new OnClickListener() {   
      @Override 
      public void onClick(View v) {... 
        Toast.makeText(context,"you clicked item: "+position,Toast.Lenght_LONG).show(); 
        //code you want to execute on click of list item... 
      } 
    }); 
    return view; 

あなたのアダプタクラスで:

ListView mListView = getListView(); 
mListView .setOnItemClickListener(new OnItemClickListener() { 

    public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) { 
     // TODO Auto-generated method stub 

    } 

}); 

答えて

2

使用..あなたはonCreate()に入れonListItemClick()方法

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
//Your code goes here..  
} 
+0

私の例を無効にしていただけますか? – user1222905

+0

thx。それは働く。私の場合は、リストとIDからテキストを返したいと思います。それを書く方法?助けが必要。 thx – user1222905

+0

ねえ!それはあなたのために働く良い。それがうまくいけば、答えを "受け入れる"必要があります。 – Pallavi

2

を感謝しています。

EDITは、あなたが私のコードを書き換えてください可能性

+0

...サンプルコードを変更しましたか? – user1222905

-1

クラスListActivityのオーバーライドする必要が

+0

私はそれを作成メソッドに入れました。私のコードを見てください – user1222905

+0

は機能していません。 – user1222905

関連する問題