【问题标题】:how to write code for onitemClickListener for customized listview using BaseAdapter?如何使用 BaseAdapter 为自定义列表视图编写 onitemClickListener 代码?
【发布时间】:2013-06-21 11:18:36
【问题描述】:

这是在 android 中使用 BaseAdapter 的自定义列表视图的代码,它工作正常:

public class CustomListAdapter extends BaseAdapter {

    private ArrayList<TaskClass> _listData;
    Context _c;

    public CustomListAdapter(Context context, ArrayList<TaskClass> listData) {

        _listData = listData;
        _c = context;

    }

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

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

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

    public View getView(int position,View convertView,ViewGroup parent) {
        View v = convertView;
        if (v == null) 
        {
            LayoutInflater layoutInflator = (LayoutInflater) _c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = layoutInflator.inflate(R.layout.listview_row, null);
        }
        TextView titleText = (TextView)v.findViewById(R.id.holdTitleText);
        TextView  catText = (TextView)v.findViewById(R.id.holdCatText);
        TextView  descText = (TextView)v.findViewById(R.id.holdDescText);
        TextView  dateText = (TextView)v.findViewById(R.id.holdDateText);
        //CheckBox checkBoxForEachItem = (CheckBox)v.findViewById(R.id.)
        TaskClass taskClassInstance = _listData.get(position);
        titleText.setText(taskClassInstance.getTitle());
        catText.setText(taskClassInstance.getTaskCategory());
        descText.setText(taskClassInstance.getDescription());
        dateText.setText(taskClassInstance.getTaskDate());
        return v;


    }


}

在活动中,我将列表视图与自定义适配器绑定:

listViewInstance.setAdapter(new CustomListAdapter(getApplicationContext(),taskClasslistInstance));

其中“taskclasslistinstance”是我的数组列表,包含来自 DB 的数据,它工作正常 现在我需要为 listitemclick 编写函数,以便当用户点击任何 listitem 时,我可以从 Database 中获取该 listitem 记录的 rowid。所以在获得 rowwid 后,我可以从中删除记录listview 和来自 db 并且可以编辑信息

【问题讨论】:

  • 问谷歌而不是stackoverflow?您正在寻找“long id”,或者您可以在 getView 中设置手动“id”视图 setTag() 并通过 v.getTag 在 clicklistener 中获取它

标签: java android sqlite custom-adapter


【解决方案1】:

好吧,我们不知道你的TaskClass,但我希望你想要这样的东西:

listViewInstance.setOnItemClickListener(new OnItemClickListener(){

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
        TaskClass taskClass = taskClasslistInstance.get(pos);
        Log.d(TAG, "Clicked on: " + taskClass)
        // Do stuff with taskClass
    }});

【讨论】:

  • 是的,您的代码运行良好,但我正在获取 takclass 的数据,我需要从数据库中获取行 ID,我该如何获取?由于我的任务类没有 ID 属性,我可能需要在我的任务类中添加 id 属性,我是初学者并且很难实现这个
  • 是的,我建议您的任务类包含一个 id 字段,它是数据库中的行 ID。当您从数据库中获取数据并构建您的TaskClass 列表时,您可以填充它。希望这是有道理的。
  • 我试图将数据库中的数据直接放入函数中,并且该函数存在于我的适配器类中,我没有使用任务类实例及其 set 方法在数据库中设置值,所以在这个场景中我如何获得行id 如果我将 id 属性放在我的任务类中,那么如何获取值?
  • 我不确定你的意思。也许如果您在新问题中发布一些数据库代码?目前没有任何数据库代码可供我查看,因此很难提供建议。
  • 如何在 SO 中添加记事本文件?我正在向您发送我的数据库和任务类的代码
【解决方案2】:

这是我项目中的一个小例子:

 list = (ListView) rootView.findViewById(R.id.list);

    adapter = new LazyAdapterAlbum(getActivity(), songs);
    list.setAdapter(adapter);

    list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent i = new Intent(getActivity(), AlbumActivity.class);
            Bundle args = new Bundle();
            args.putString(AlbumActivity.ALBUM_NAME, adapter.getItem(position).getName());
            i.putExtras(args);
            startActivity(i);
        }
    });

你必须在你的 ListView 上设置一个 onClickListener。

【讨论】:

    【解决方案3】:

    你也可以像下面这样在getView方法中设置:

    public View getView(int position,View convertView,ViewGroup parent) {
            View v = convertView;
            if (v == null) 
            {
                LayoutInflater layoutInflator = (LayoutInflater) _c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = layoutInflator.inflate(R.layout.listview_row, null);
            }
            TextView titleText = (TextView)v.findViewById(R.id.holdTitleText);
            TextView  catText = (TextView)v.findViewById(R.id.holdCatText);
            TextView  descText = (TextView)v.findViewById(R.id.holdDescText);
            TextView  dateText = (TextView)v.findViewById(R.id.holdDateText);
            //CheckBox checkBoxForEachItem = (CheckBox)v.findViewById(R.id.)
            TaskClass taskClassInstance = _listData.get(position);
            titleText.setText(taskClassInstance.getTitle());
            catText.setText(taskClassInstance.getTaskCategory());
            descText.setText(taskClassInstance.getDescription());
            dateText.setText(taskClassInstance.getTaskDate());
    
           v.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                //Perform an action when this list item is clicked
            }
        });
            return v;
    
    
        }
    

    【讨论】:

      猜你喜欢
      • 2013-04-26
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多