Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将onclick添加到CustomAdapter以处理onclick事件_Android_Listview - Fatal编程技术网

Android 将onclick添加到CustomAdapter以处理onclick事件

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

下面是我的适配器代码,它当前将DataObject中的值分配到我的layout.xml文件中各自的位置。接下来,我尝试在这里添加一个onclicklistener,它将只向logcat打印单击的唯一id字段,而不是整行的内容

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)哇,我不敢相信我没有想到要这么做。非常好,简单的解决方案,非常感谢你的回复!!!