【问题标题】:how to get listview item on button click and save to sqlite如何在按钮单击时获取列表视图项目并保存到 sqlite
【发布时间】:2015-02-01 18:20:58
【问题描述】:

我在列表视图中有四个文本视图和一个按钮。当用户单击按钮时,我想获取这四个文本视图的值并传递给数据库。我很困惑如何将所选项目的数据保存到 sqlite。

public class PlannningListViewAdapter extends BaseAdapter{

    Context context;
    public ArrayList<Planning> planArraylist;
    private static LayoutInflater inflater = null;
    public Activity planActivity;

    public PlannningListViewAdapter(Context context,
            ArrayList<Planning> planArraylist) {
        this.context = context;
        this.planArraylist = planArraylist;
        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

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

    @Override
    public Object getItem(int arg0) {
        return arg0;
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.single_lv_item, null);
        }

        Planning p = planArraylist.get(position);

        TextView tvDocCode = (TextView) convertView.findViewById(R.id.Plan_no);
        TextView tvDocName = (TextView) convertView.findViewById(R.id.doc_name);
        TextView tvmon = (TextView) convertView.findViewById(R.id.mon);
        TextView tvAdr = (TextView) convertView.findViewById(R.id.adr);
        Button   btn_save =(Button)convertView.findViewById(R.id.button1);
        btn_save.setOnClickListener(ButtonClickListener);


        tvDocCode.setText(p.getDocCode());
        tvDocName.setText(p.getDocName());
        tvmon.setText(p.getTerrCode());
        tvAdr.setText(p.getAdr());
        return convertView;
    }
    private OnClickListener ButtonClickListener = new OnClickListener() {
        @Override
        public void onClick(View v) {
            final int position = mListView.getPositionForView((View) v.getParent());
           // Log.v(TAG, "item clicked, row %d", position);
        }
    };

}

【问题讨论】:

  • 您面临的问题是什么?我看不到您尝试将数据保存到数据库中的任何代码。

标签: android sqlite listview listviewitem


【解决方案1】:

你可以在你的按钮上使用setTag()getTag()方法。

请看下面的代码:

你必须改变 getItem 方法:

@Override
public Planning getItem(int arg0) {
    return planArraylist.get(arg0);
}

更新您的 getView 方法:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ...

    Button   btn_save =(Button)convertView.findViewById(R.id.button1);
    btn_save.setTag(position);

    ...
}


private OnClickListener ButtonClickListener = new OnClickListener() {
    @Override
    public void onClick(View v) {
        final int position = (int)v.getTag();
        Planning planning = getItem(position);
        yourDatabaseHelper. getRuntimeExceptionDao(Planning.class).createOrUpdate(planning);
    }
};

还有一件事。你应该实现ViewHolder,请阅读这个模式,最好的解决方案是使用RecyclerView,获取位置已经在RecyclerView.ViewHolder中实现。

【讨论】:

  • 非常感谢。你能告诉我如何将值传递给数据库
  • 您是使用某个库将其写入 Db 还是仅使用 DatabaseHelper?
  • 我正在使用 databasehelper,我知道插入的方法,但我不知道如何使用 position 获取文本值
  • 您指的是哪些文本值?我想插入你的对象。
  • 如果你想从 Planning 对象中获取值。您必须像我的帖子中那样通过 getItem 位置方法从数组中获取它并将其插入到 db
猜你喜欢
  • 2013-12-30
  • 2016-12-29
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 2020-07-26
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
相关资源
最近更新 更多