Sunday, December 10, 2017

Edittext in list

This tutorial will help you to enter and get text in recycler view.




Steps to use Edittext in list in your project.

  1. Crate a project(EdittextInListDemo) in android studio.

  2. Create a class MainActivity.Java and update it-


    package com.pankaj.gsolc.edittextinadaptersdemo;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.GridLayoutManager;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.Toast;
    
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity {
        //create objects    private List<Data> data = new ArrayList<>();
        private MyAdapter myAdapter;
        RecyclerView recyclerView;
    
        @Override    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //initialize        recyclerView = findViewById(R.id.recyclerView);
    
            //add one data        Data data = new Data();
            data.setPosition(0);
            data.setString("");
            this.data.add(data);
    
            //initialize adapter        myAdapter = new MyAdapter(this, this.data);
    
            //add layout manager to recycler view        recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
    
            //add adapter        recyclerView.setAdapter(myAdapter);
    
        }
    
        public void addOneMore(View view) {
    
            //Check if more than one data available, Than previous edittext should not be empty.        if (data.size() > 0)
                if (data.get(0).getString().isEmpty()){
                    Toast.makeText(this, "Please fill the empty fields first.", Toast.LENGTH_SHORT).show();
                    return;
                }
                
            //Create and add one blank data to entry        Data data = new Data();
            data.setPosition(this.data.size());
            data.setString("");
            this.data.add(0, data);
    
            //notify adapter        myAdapter.notifyDataSetChanged();
        }
    
        public void showData(View view) {
            //check if no data available, than return from here        if (data.size() < 1)
                return;
    
            String enteredData = "";
    
            for (Data data : data) {
                enteredData += data.getString() + "\n";
            }
    
            Toast.makeText(this, enteredData, Toast.LENGTH_SHORT).show();
        }
    }
    
    
    
    
     
  3. Create a class Data.java to store data.


    package com.pankaj.gsolc.edittextinadaptersdemo;
    
    /** * Created by gsolc on 8/11/17. */
    public class Data {
        int position;
        String string;
    
        public int getPosition() {
            return position;
        }
    
        public void setPosition(int position) {
            this.position = position;
        }
    
        public String getString() {
            return string;
        }
    
        public void setString(String string) {
            this.string = string;
        }
    }
    

  4. Create MyAdapter.java and update it-


    package com.pankaj.gsolc.edittextinadaptersdemo;
    
    import android.app.Activity;
    import android.support.v7.widget.RecyclerView;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.EditText;
    import java.util.List;
    
    /** * Created by gsolc on 7/11/17. */
    public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
        private List<Data> data;
        private Activity activity;
    
        public MyAdapter(Activity activity, List<Data> data) {
            this.activity = activity;
            this.data = data;
        }
    
    
        @Override    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View itemView = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.row_with_edit_text, parent, false);
    
            return new ViewHolder(itemView);
        }
    
        @Override    public void onBindViewHolder(final MyAdapter.ViewHolder holder, int position) {
    
            //set positions to listeners        holder.textWatcher.setPosition(position);
            holder.clickListener.setPosition(position);
    
            //set previous data on refreshing        if (data.get(position).getString() != null)
                holder.editText.setText(data.get(position).getString());
            else            holder.editText.setText("");
    
        }
    
    
        @Override    public int getItemCount() {
            return data.size();
        }
    
        public class ViewHolder extends RecyclerView.ViewHolder {
    
            //create objects        final public EditText editText;
            MyTextWatcher textWatcher;
            MyClickListener clickListener;
            public Button btnDelete;
    
            public ViewHolder(View itemView) {
                super(itemView);
    
                //initialize objects            editText = itemView.findViewById(R.id.editText);
                btnDelete = itemView.findViewById(R.id.btnDelete);
    
                //initialize listeners            textWatcher = new MyTextWatcher(editText);
                clickListener = new MyClickListener();
    
                //add listeners            editText.addTextChangedListener(textWatcher);
                btnDelete.setOnClickListener(clickListener);
    
            }
        }
    
        //create a text change listener    public class MyTextWatcher implements TextWatcher {
            private EditText editText;
            private int position;
    
            public void setPosition(int position) {
                this.position = position;
            }
    
            public MyTextWatcher(EditText editText) {
                this.editText = editText;
            }
    
            @Override        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
            }
    
            @Override        public void onTextChanged(CharSequence s, int start, int before, int count) {
    
                //add data into data list            data.get(position).setString(s + "");
            }
    
            @Override        public void afterTextChanged(Editable s) {
    
            }
        }
    
        //Create a listener to remove any edittext    public class MyClickListener implements View.OnClickListener {
            private int position;
    
            public void setPosition(int position) {
                this.position = position;
            }
    
            @Override        public void onClick(View view) {
    
                //remove and notify            data.remove(position);
                notifyDataSetChanged();
            }
        }
    }


    Create row of adapter row_with_edit_text.xml file and update it-


    <?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="wrap_content">
    
        <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal">
    
            <EditText            android:id="@+id/editText"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_weight="1"            android:hint="Enter Text "            android:inputType="text" />
    
            <Button            android:id="@+id/btnDelete"            android:layout_width="40dp"            android:layout_height="match_parent"            android:background="@android:drawable/ic_delete" />
    
        </LinearLayout>
    
    
    </android.support.constraint.ConstraintLayout>


    Open your main_activity.xml file and update it-


    <?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.pankaj.gsolc.edittextinadaptersdemo.MainActivity">
    
        <LinearLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical">
    
            <Button            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:onClick="addOneMore"            android:text="Add One More" />
    
            <android.support.v7.widget.RecyclerView            android:id="@+id/recyclerView"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_weight="1"            android:scrollbars="vertical" />
    
            <Button            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:onClick="showData"            android:text="Show entered data" />
    
    
        </LinearLayout>
    
    </android.support.constraint.ConstraintLayout>


  5. All the application development process with Edittext in list has completed, Now run the app and look the screen.
     



  6.  Good bye, Thanks to read this blog.

No comments:

Post a Comment