Showing posts with label Text and clear in list. Show all posts
Showing posts with label Text and clear in list. Show all posts

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.