In my app,I have number of buttons in Mainactivity and my app uses a recycler view to show the list items(row_layout).The list items(row_layout) consists of 2 edit text and one text view. I've created a custom adapter to display the row_layout.
Now, I want my app to update the two EditText and TextView on adapter based on button clicks made on the MainActivity but the problem is buttons are on MainActivity and the EditText and TextView are in adapter.So how do I achieve this?
Please don't mark this question as duplicate, I've searched a lot but I failed and this is my last chance to ask question in stackoverflow, Please help me
Thanks in advance.
This is my activity_main
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:orientation="vertical"
tools:context=".MainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="0dp"
android:layout_marginBottom="13dp">
<Button
android:id="@+id/buttonl7"
android:layout_width="54dp"
android:layout_height="58dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="9dp"
android:layout_marginBottom="4dp"
android:padding="4dp"
android:text="7" />
<Button
android:id="@+id/buttonr9"
android:layout_width="54dp"
android:layout_height="58dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="330dp"
android:layout_marginBottom="0dp"
android:padding="4dp"
android:text="9" />
<Button
android:id="@+id/buttonr8"
android:layout_width="54dp"
android:layout_height="58dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="274dp"
android:layout_marginBottom="2dp"
android:padding="4dp"
android:text="8" />
<Button
android:id="@+id/buttonr7"
android:layout_width="54dp"
android:layout_height="58dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="211dp"
android:layout_marginBottom="4dp"
android:padding="4dp"
android:text="7" />
<Button
android:id="@+id/buttonl9"
android:layout_width="54dp"
android:layout_height="58dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="131dp"
android:layout_marginBottom="5dp"
android:padding="4dp"
android:text="9" />
<Button
android:id="@+id/buttonl8"
android:layout_width="54dp"
android:layout_height="58dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="69dp"
android:layout_marginBottom="7dp"
android:padding="4dp"
android:text="8" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="0dp"
android:layout_marginBottom="161dp">
<Button
android:id="@+id/buttonl1"
android:layout_width="54dp"
android:layout_height="58dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="9dp"
android:layout_marginBottom="4dp"
android:padding="4dp"
android:text="1" />
<Button
android:id="@+id/buttonr3"
android:layout_width="54dp"
android:layout_height="58dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="327dp"
android:layout_marginBottom="2dp"
android:padding="4dp"
android:text="3" />
<Button
android:id="@+id/buttonr2"
android:layout_width="54dp"
android:layout_height="58dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="269dp"
android:layout_marginBottom="2dp"
android:padding="4dp"
android:text="2" />
<Button
android:id="@+id/buttonr1"
android:layout_width="54dp"
android:layout_height="58dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="209dp"
android:layout_marginBottom="5dp"
android:padding="4dp"
android:text="1" />
<Button
android:id="@+id/buttonl3"
android:layout_width="54dp"
android:layout_height="58dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="129dp"
android:layout_marginBottom="6dp"
android:padding="4dp"
android:text="3" />
<Button
android:id="@+id/buttonl2"
android:layout_width="54dp"
android:layout_height="58dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="69dp"
android:layout_marginBottom="7dp"
android:padding="4dp"
android:text="2" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="0dp"
android:layout_marginBottom="87dp">
<Button
android:id="@+id/buttonl4"
android:layout_width="54dp"
android:layout_height="58dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="9dp"
android:layout_marginBottom="4dp"
android:padding="4dp"
android:text="4" />
<Button
android:id="@+id/buttonr6"
android:layout_width="54dp"
android:layout_height="58dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="330dp"
android:layout_marginBottom="3dp"
android:padding="4dp"
android:text="6" />
<Button
android:id="@+id/buttonr5"
android:layout_width="54dp"
android:layout_height="58dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="268dp"
android:layout_marginBottom="3dp"
android:padding="4dp"
android:text="5" />
<Button
android:id="@+id/buttonr4"
android:layout_width="54dp"
android:layout_height="58dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="209dp"
android:layout_marginBottom="6dp"
android:padding="4dp"
android:text="4" />
<Button
android:id="@+id/buttonl6"
android:layout_width="54dp"
android:layout_height="58dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="131dp"
android:layout_marginBottom="6dp"
android:padding="4dp"
android:text="6" />
<Button
android:id="@+id/buttonl5"
android:layout_width="54dp"
android:layout_height="58dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="69dp"
android:layout_marginBottom="6dp"
android:padding="4dp"
android:text="5" />
</RelativeLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="376dp"
android:layout_height="262dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="0dp"
android:layout_marginTop="5dp" />
</RelativeLayout>
This is my Main activity .java
package com.example.manuj.autocalc2;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
Button buttonl0, buttonl1, buttonl2, buttonl3, buttonl4, buttonl5, buttonl6,
buttonl7, buttonl8, buttonl9, buttonl10;
Button buttonr0, buttonr1, buttonr2, buttonr3, buttonr4, buttonr5, buttonr6, buttonr7,
buttonr8, buttonr9, buttonr10;
RecyclerView recyclerView;
CustomAdapter customAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// button0 = (Button) findViewById(R.id.buttonl0);
buttonl1 = (Button) findViewById(R.id.buttonl1);
buttonl2 = (Button) findViewById(R.id.buttonl2);
buttonl3 = (Button) findViewById(R.id.buttonl3);
buttonl4 = (Button) findViewById(R.id.buttonl4);
buttonl5 = (Button) findViewById(R.id.buttonl5);
buttonl6 = (Button) findViewById(R.id.buttonl6);
buttonl7 = (Button) findViewById(R.id.buttonl7);
buttonl8 = (Button) findViewById(R.id.buttonl8);
buttonl9 = (Button) findViewById(R.id.buttonl9);
buttonr1 = (Button) findViewById(R.id.buttonr1);
buttonr2 = (Button) findViewById(R.id.buttonr2);
buttonr3 = (Button) findViewById(R.id.buttonr3);
buttonr4 = (Button) findViewById(R.id.buttonr4);
buttonr5 = (Button) findViewById(R.id.buttonr5);
buttonr6 = (Button) findViewById(R.id.buttonr6);
buttonr7 = (Button) findViewById(R.id.buttonr7);
buttonr8 = (Button) findViewById(R.id.buttonr8);
buttonr9 = (Button) findViewById(R.id.buttonr9);
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setItemAnimator(new DefaultItemAnimator());
final ArrayList<Calc> arrayList = new ArrayList<>();
customAdapter = new CustomAdapter(this, arrayList);
Calc calc = new Calc("-", "-", "-");
arrayList.add(calc);
recyclerView.setAdapter(customAdapter);
buttonl1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//when this is clicked, i want to update 1 to editText.
}
});
}
}
This is my list_items(row_layout)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:id="@+id/itemEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:hint="Enter The Item"
android:text="" />
<EditText
android:id="@+id/amtEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:hint="Enter The Amt"
android:text="" />
<TextView
android:id="@+id/Price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:text="Price"
android:textSize="18sp"/>
</LinearLayout>
</LinearLayout>
This is my custom adapter class
package com.example.manuj.autocalc2;
import android.app.Activity;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.example.manuj.autocalc2.Calc;
import com.example.manuj.autocalc2.MainActivity;
import com.example.manuj.autocalc2.R;
import java.util.ArrayList;
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {
private LayoutInflater inflater;
public static ArrayList<Calc> editModelArrayList;
public CustomAdapter(Context ctx, ArrayList<Calc> editModelArrayList){
inflater = LayoutInflater.from(ctx);
this.editModelArrayList = editModelArrayList;
}
@Override
public CustomAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.list_items, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(final CustomAdapter.MyViewHolder holder, final int position) {
holder.editText1.setText(editModelArrayList.get(position).getmItemEdit());
holder.editText2.setText(editModelArrayList.get(position).getmAmtEdit());
holder.textView.setText(editModelArrayList.get(position).getmAmtEdit());
}
@Override
public int getItemCount() {
return editModelArrayList.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
protected EditText editText1;
protected EditText editText2;
protected TextView textView;
public void updateItemEdit(String text){
editText1.setText(editText1.getText());
}
public MyViewHolder(View itemView) {
super(itemView);
editText1 = (EditText) itemView.findViewById(R.id.itemEdit);
editText2=itemView.findViewById(R.id.amtEdit);
textView=itemView.findViewById(R.id.Price);
editText1.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
editModelArrayList.get(getAdapterPosition()).setmItemEdit(editText1.getText()+editText2.getText().toString());
}
@Override
public void afterTextChanged(Editable editable) {
}
});
editText2.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
editModelArrayList.get(getAdapterPosition()).setmItemEdit(editText1.getText()+editText2.getText().toString());
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}
}
}