如何在单击按钮时获取列表视图项并保存到 sqlite

how to get listview item on button click and save to sqlite

我有四个文本视图和一个列表视图按钮。当用户单击按钮时,我想获取这四个文本视图的值并传递给数据库。我很困惑如何将所选项目的数据保存到 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);
        }
    };

}

您可以在按钮上使用 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.

中实施