Andrain
Andrain

Reputation: 910

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

I've four textviews and a button in listview. when user clicks on the button i want to get the value of these four textviews and pass to the database. I'm confuse how to save the data of selected item to 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);
        }
    };

}

Upvotes: 0

Views: 1148

Answers (1)

Konrad Krakowiak
Konrad Krakowiak

Reputation: 12365

You can use setTag()and getTag() method on your button.

Please look at the code below:

You have to change getItem method:

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

Update your getView method:

@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);
    }
};

One more thing. You should implement ViewHolder please read about this pattern, and the best solution for you is use RecyclerView, getting position is already implemented there in RecyclerView.ViewHolder.

Upvotes: 2

Related Questions