Android 将onclick添加到CustomAdapter以处理onclick事件
下面是我的适配器代码,它当前将DataObject中的值分配到我的layout.xml文件中各自的位置。接下来,我尝试在这里添加一个onclicklistener,它将只向logcat打印单击的唯一id字段,而不是整行的内容Android 将onclick添加到CustomAdapter以处理onclick事件,android,listview,Android,Listview,下面是我的适配器代码,它当前将DataObject中的值分配到我的layout.xml文件中各自的位置。接下来,我尝试在这里添加一个onclicklistener,它将只向logcat打印单击的唯一id字段,而不是整行的内容 private class DataAdapter extends ArrayAdapter<DataObject> { private ArrayList<DataObject> items; public DataAdapte
private class DataAdapter extends ArrayAdapter<DataObject> {
private ArrayList<DataObject> items;
public DataAdapter(Context context, int textViewResourceId, ArrayList<DataObject> items) {
super(context, textViewResourceId, items);
this.items = items;
}
@Override
public long getItemId(int arg0) {
return 1;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R.layout.data_row, null);
}
DataObject dataObject = items.get(position);
if (dataElement != null) {
TextView field1 = (TextView) view.findViewById(R.id.field1);
TextView field2= (TextView) view.findViewById(R.id.field2);
TextView id = (TextView) view.findViewById(R.id.field_id);
if (field1 != null) {
field1.setText("field1 " + dataOject.getField1);
}
if (field2 != null) {
field2.setText("field2 " + dataOject.getField2);
}
view.setClickable(true);
view.setOnClickListener
// Would like to simply print the id in this method to Log, so that when a row is clicked, only id is printed
}
return view;
}
私有类DataAdapter扩展了ArrayAdapter{
私有ArrayList项;
公共数据适配器(上下文上下文、int textViewResourceId、ArrayList项){
super(上下文、textViewResourceId、项);
这个项目=项目;
}
@凌驾
公共长getItemId(int arg0){
返回1;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=转换视图;
如果(视图==null){
LayoutInflater vi=(LayoutInflater)getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
视图=vi.充气(R.layout.data_行,空);
}
DataObject DataObject=items.get(位置);
if(数据元素!=null){
TextView字段1=(TextView)view.findViewById(R.id.field1);
TextView字段2=(TextView)view.findViewById(R.id.field2);
TextView id=(TextView)view.findViewById(R.id.field\u id);
如果(字段1!=null){
field1.setText(“field1”+dataobject.getField1);
}
如果(字段2!=null){
field2.setText(“field2”+dataobject.getField2);
}
视图。可点击设置(真);
view.setOnClickListener
//只需将此方法中的id打印到日志,以便在单击行时只打印id
}
返回视图;
}
感谢您的任何想法或想法,因此不要在适配器代码中设置
OnClickListener
。在活动中使用。使用这种类型的侦听器将为您提供列表中的位置作为参数之一。请注意,setOnListItemClick仅用于ListActivity,如果您不使用ListActivity,请在ListView obj上使用ect.您可以在设置适配器的ListFragment或Activity中设置onClickListener
class MyFragment extends ListFragment {
public void onActivityCreated(Bundle savedInstanceState) {
DataAdapter mAdapter = new DataAdapter(..);
setListAdapter(mAdapter);
ListView listView = getListView();
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
}
});
}
}
类MyFragment扩展了ListFragment{
已创建ActivityState上的公共无效(Bundle savedInstanceState){
DataAdapter mAdapter=新的DataAdapter(..);
setListAdapter(mAdapter);
ListView ListView=getListView();
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
}
});
}
}
这应该行得通
view.setTag(position);
view.setOnClickListener(new View.OnClickListener() {
@override
public void onClick(View v) {
Log.v(TAG, "Clicked = " + position);
}
});
但是,我建议在ListView
上设置AdapterView.OnItemClickListener
,而不是在每个项目上设置单个OnClickListener
import android.widget.AdapterView.OnItemClickListener;
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
@override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.v(TAG, "Clicked = " + position);
}
});
导入android.widget.AdapterView.OnItemClickListener;
ListView lv=getListView();
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
Log.v(标签,“点击=”+位置);
}
});
您可以从填充列表的基础数据结构中获取值。
例如,如果它是从一个列表中填充的,并且您知道它的位置,那么只需从列表中获取相应的元素即可
例如,我在我的项目中使用了这段代码
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
ContactItem contactItem = contactItemList.get(position);
..
}
});
listView.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
ContactItem ContactItem=contactItemList.get(位置);
..
}
});
感谢您的回复,我已经尝试在活动中包含一个McClickListener,但我只能获取整行内容,无法找到只获取3个字段中1个字段的方法(我不想从行中解析出来,我假设有更好的方法?).I在我的onItemClick方法中使用它来捕获行:Object rowData=listView.getItemAtPosition(position);感谢您的回复,很抱歉,我在上面的代码中不太清楚。我实际上是在尝试获取字段的值,而不是列表位置。我的DataObject包含3个数据值,我在每行中显示,其中一个数据值命名为field_id,这是我希望在单击时打印的值。TextView id=(TextView)view.findViewById(R.id.field_id);感谢您的回复,我已经能够在我的活动中做到这一点,但是我想不出一种方法来只选择我的3个字段中的1个。在onItemClick方法中使用Object rowData=listView.getItemAtPosition(position)可以得到整行数据,我只想得到我在适配器中设置的3个字段中的1个(field_id)哇,我不敢相信我没有想到要这么做。非常好,简单的解决方案,非常感谢你的回复!!!