私はリストビューを拡張するクラスを持っています。私はそのリストビューに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
}
});
私の例を無効にしていただけますか? – user1222905
thx。それは働く。私の場合は、リストとIDからテキストを返したいと思います。それを書く方法?助けが必要。 thx – user1222905
ねえ!それはあなたのために働く良い。それがうまくいけば、答えを "受け入れる"必要があります。 – Pallavi