RecyclerView custommAdapter and MainActivity



在我的应用程序中,Mainactivity中有许多按钮,我的应用使用回收器视图来显示列表项(row_layout(。列表项(row_layout(由2个编辑文本和一个文本视图组成。我已经创建了一个自定义适配器来显示row_layout。

现在,我希望我的应用程序根据在MainActivity上单击的按钮更新适配器上的两个EditText和TextView,但问题是按钮在MainActivity中,EditText和TextView在适配器中。那么我该如何做到这一点呢?

请不要将这个问题标记为重复,我已经搜索了很多,但我失败了,这是我在stackoverflow中提问的最后一次机会,请帮助我

提前谢谢。

这是我在中的活动_

<?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>

这是我的主要活动.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.
}
});
}
}

这是我的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>

这是我的自定义适配器类

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

如果我正确理解您的问题,您需要更新recyclerview项。因此,您可以使用以下方法:

  • 您可以更改arraylist并调用adapter.notifyDataSetChange
  • 你可以找到recyclerview的子项目,你可以更改它。有样品

在活动中

Calc calc = new Calc("-", "-", "-");
arrayList.add(calc);
arrayList.add(calc);
arrayList.add(calc);
arrayList.add(calc);
arrayList.add(calc);
arrayList.add(calc);
arrayList.add(calc);
arrayList.add(calc);
arrayList.add(calc);
recyclerView.setAdapter(customAdapter);
//  add 9 values to list so that each button will change it's respective position
buttonl1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calc calc = new Calc("buttonl1", "buttonl1", "buttonl1");
customAdapter.updateEntryAt(0,calc);
}
});
buttonl2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calc calc = new Calc("buttonl2", "buttonl2", "buttonl2");
customAdapter.updateEntryAt(1,calc);
}
});

在适配器中

public void updateEntryAt(int positionToUpdate,Calc calc){
editModelArrayList.remove(positionToUpdate);
editModelArrayList.add(positionToUpdate,calc);
notifyDataSetChanged();
}

updateEntryAt方法将更改适配器内的列表,删除您开始使用的列表中的旧值,并用传递给该方法的新值替换它。和notifyDataSetChanged((;将刷新适配器,使其显示新值。

最新更新