Saving the content of edittext,checkbox in listview android

Activity_main:
 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="noisuy.com.duy.edittextlistview.MainActivity">

<ListView
    android:id="@+id/lvPeople"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></ListView>
</RelativeLayout>
item_listview.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/tvPosition"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <EditText
        android:id="@+id/edName"
        android:layout_width="100dp"
        android:layout_height="wrap_content" />

    <CheckBox
        android:id="@+id/cbShowName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>
ObjectPeople.java
package noisuy.com.duy.edittextlistview;

/**
 * Created by Latitude on 02/10/2016.
 */

public class ObjectPeople {
    boolean ShowName;
    String name;

    public ObjectPeople() {
    }

    public boolean isShowName() {
        return ShowName;
    }

    public void setShowName(boolean showName) {
        ShowName = showName;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
AdapterListView.java
package noisuy.com.duy.edittextlistview;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.TextView;

import java.util.ArrayList;

/**
 * Created by Latitude on 02/10/2016.
 */

public class AdapterListView extends ArrayAdapter<ObjectPeople> {

    Context mContext;

    LayoutInflater inflater;

    ArrayList<ObjectPeople> arrayPeople;

    public AdapterListView(Context context, int resource, ArrayList<ObjectPeople> arraypeople) {

        super(context, resource);

        this.mContext = context;
        this.arrayPeople = arraypeople;
        this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    @Override

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

        final ViewHolder holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.item_listview, null);
            holder = new ViewHolder();
            holder.tvPosition = (TextView) convertView.findViewById(R.id.tvPosition);
            holder.edName = (EditText) convertView.findViewById(R.id.edName);
            holder.cbShowName = (CheckBox) convertView.findViewById(R.id.cbShowName);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        ObjectPeople person = arrayPeople.get(position);
        holder.tvPosition.setText("Item " + position);
        holder.cbShowName.setChecked(person.isShowName());

        if (person.isShowName()) {
            holder.edName.setVisibility(View.VISIBLE);
        } else {
            holder.edName.setVisibility(View.INVISIBLE);
        }
        //Using setOnclickListener not setOnCheckedChangeListener
        holder.cbShowName.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (holder.cbShowName.isChecked()) {
                    arrayPeople.get(position).setShowName(true);
                    holder.edName.setVisibility(View.VISIBLE);
                } else {
                    arrayPeople.get(position).setShowName(false);
                    holder.edName.setVisibility(View.INVISIBLE);
                    arrayPeople.get(position).setName("");

                }
            }
        });

//Fill EditText with the value you have in data source
        holder.edName.setText(person.getName());
        holder.edName.setId(position);

//we need to update adapter once we finish with editing
        holder.edName.setOnFocusChangeListener(new View.OnFocusChangeListener() {

            public void onFocusChange(View v, boolean hasFocus) {

                if (!hasFocus) {
                    final int position = v.getId();
                    final EditText Caption = (EditText) v;
                    arrayPeople.get(position).setName(Caption.getText().toString());
                }

            }

        });

        return convertView;

    }

    @Override

    public int getCount() {

        return arrayPeople.size();

    }

    static class ViewHolder {
        TextView tvPosition;
        EditText edName;
        CheckBox cbShowName;
    }

}
MainActivity.java
package noisuy.com.duy.edittextlistview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
ListView lvPeople;
    AdapterListView adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lvPeople= (ListView) findViewById(R.id.lvPeople);
        ObjectPeople person;
        ArrayList<ObjectPeople> arrPeople=new ArrayList<>();
        for (int i=0;i<50;i++){
            person=new ObjectPeople();
            person.setName("Name "+i);
            person.setShowName(false);
            arrPeople.add(person);
        }
        adapter=new AdapterListView(this,R.layout.item_listview,arrPeople);
        lvPeople.setAdapter(adapter);
    }
}


SHARE

Nguyễn Văn Duy

  • Image
  • Image
  • Image
  • Image
  • Image

2 comments:

  1. what about last item in list?.. the focus will not change so its value will not taken

    ReplyDelete
    Replies
    1. while button onclick set clear focus to the edittext

      Delete