如何解决android java - 在弹出对话框时动态更改基本适配器对话框中的数据
当用户在网格视图中显示的回收器视图中点击文本视图年龄时,我想将一个人的年龄增加 10 岁。还有一个自定义对话框,显示相同的数据,当用户点击其中一张基本适配卡时会弹出这些数据。我还想在用户点击 textview age 而不关闭弹出对话框时更改对话框的数据。详情请见底部图片。
代码: MainActivity.java:
public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding;
Context c;
ArrayList<ListData> listData;
ArrayList<ListDataDetails> listDataDetails;
int[] arrayImages;
MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
c = this;
listData = new ArrayList<>();
setupData();
setupAdapter();
}
private void setupData() {
arrayImages = new int[] {
R.drawable.ic_launcher_background,R.drawable.ic_launcher_foreground,R.drawable.ic_launcher_background,R.drawable.ic_launcher_background
};
for (int i = 0; i < 5; i++) {
listDataDetails = new ArrayList<>();
if (i == 0) {
listDataDetails.add(new ListDataDetails("0","Sabu","20","Kochi"));
listData.add(new ListData("0","Painter","12000",listDataDetails));
} else if (i == 1) {
listDataDetails.add(new ListDataDetails("1","Thomas","30","Kottayam"));
listData.add(new ListData("1","Carpenter","13000",listDataDetails));
} else if (i == 2) {
listDataDetails.add(new ListDataDetails("2","Anly","40","Tiruvalla"));
listData.add(new ListData("2","Welder","15000",listDataDetails));
} else if (i == 3) {
listDataDetails.add(new ListDataDetails("3","Sebato","50","Fort Kochi"));
listData.add(new ListData("3","Watch Man","10000",listDataDetails));
} else {
listDataDetails.add(new ListDataDetails("4","Angel","60","Aluva"));
listData.add(new ListData("4","Receptionist",listDataDetails));
}
}
}
private void setupAdapter() {
adapter = new MyAdapter(this,arrayImages,listData,listDataDetails);
binding.gvImages.setAdapter(adapter);
}
}
MyAdapter.java
public class MyAdapter extends BaseAdapter {
Context context;
DataAdapter dataAdapter;
int[] arrayImages;
ArrayList<ListData> listData;
ArrayList<ListDataDetails> listDataDetails;
LayoutInflater mInflater;
Dialog d;
MyAdapter(Context context,int[] arrayImages,ArrayList<ListData> listData,ArrayList<ListDataDetails> listDataDetails) {
this.context = context;
this.arrayImages = arrayImages;
this.listData = listData;
this.listDataDetails = listDataDetails;
mInflater = LayoutInflater.from(context);
d = new Dialog(context);
}
@Override
public View getView(int position,View convertView,ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.grid_layout,null);
}
ImageView imageView = convertView.findViewById(R.id.imageView);
imageView.setimageResource(arrayImages[position]);
TextView tvId,tvJob,tvSalary;
tvId = convertView.findViewById(R.id.tvId);
tvJob = convertView.findViewById(R.id.tvJob);
tvSalary = convertView.findViewById(R.id.tvSalary);
tvId.setText("ID: " + listData.get(position).getId());
tvJob.setText("Job: " + listData.get(position).getJob());
tvSalary.setText("Salary: " +listData.get(position).getSalary());
RecyclerView recyclerView = convertView.findViewById(R.id.rvData);
dataAdapter = new DataAdapter(listData.get(position).getWorkerDetails());
recyclerView.setLayoutManager(new linearlayoutmanager(context,linearlayoutmanager.VERTICAL,false));
recyclerView.setAdapter(dataAdapter);
convertView.setonClickListener(v -> {
CustomDesignBinding binding = CustomDesignBinding.inflate(mInflater);
d.setContentView(binding.getRoot());
Window window = d.getwindow();
assert window != null;
window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
binding.rvData.setLayoutManager(new linearlayoutmanager(context,false));
dataAdapter = new DataAdapter(listData.get(position).getWorkerDetails());
binding.rvData.setAdapter(dataAdapter);
d.show();
});
return convertView;
}
@Override
public int getCount() {
return arrayImages.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
}
DataAdapter.java
public class DataAdapter extends RecyclerView.Adapter<DataAdapter.Holder> {
private List<ListDataDetails> dataDetails;
public DataAdapter(List<ListDataDetails> dataDetails) {
this.dataDetails = dataDetails;
}
static class Holder extends RecyclerView.ViewHolder {
private final DesignBinding binding;
public Holder(DesignBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
}
@NonNull
@Override
public DataAdapter.Holder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
return new DataAdapter.Holder(DesignBinding.inflate(LayoutInflater.from(parent.getContext()),parent,false));
}
@Override
public void onBindViewHolder(@NonNull DataAdapter.Holder holder,int position) {
holder.binding.tvName.setText("Name: " +dataDetails.get(position).getName());
holder.binding.tvAge.setText("Age: " + dataDetails.get(position).getAge());
holder.binding.tvPlace.setText("Place: " +dataDetails.get(position).getPlace());
}
@Override
public int getItemCount() {
return dataDetails.size();
}
}
ListData.java
public class ListData {
private String id;
private String job;
private String salary;
private List<ListDataDetails> workerDetails;
public ListData(String id,String job,String salary,List<ListDataDetails> workerDetails) {
this.id = id;
this.job = job;
this.salary = salary;
this.workerDetails = workerDetails;
}
public String getId(){
return id;
}
public String getJob() { return job; }
public String getSalary() { return salary; }
public List<ListDataDetails> getWorkerDetails(){ return workerDetails; }
}
ListDataDetails.java
public class ListDataDetails {
private String id;
private String name;
private String age;
private String place;
public ListDataDetails(String id,String name,String age,String place) {
this.id = id;
this.name = name;
this.age = age;
this.place = place;
}
public String getId(){
return id;
}
public String getName(){
return name;
}
public String getAge(){
return age;
}
public String getPlace(){
return place;
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".MainActivity">
<GridView
android:id="@+id/gvImages"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:horizontalSpacing="10dp"
android:verticalSpacing="10dp"
android:numColumns="2"
android:gravity="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
grid_layout.java
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:padding="10dp"
android:background="@color/black"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tvId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:text="Id: 10" />
<TextView
android:id="@+id/tvJob"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:text="JOb: Painter" />
<TextView
android:id="@+id/tvSalary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:text="Salary: 12000" />
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="200dp"
android:scaleType="centerCrop"
tools:srcCompat="@tools:sample/avatars" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvData"
android:background="@color/white"
android:layout_width="match_parent"
android:layout_height="120dp"/>
</LinearLayout>
custom_design.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvData"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
设计.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" >
<TextView
android:id="@+id/tvName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Sabu"/>
<TextView
android:id="@+id/tvAge"
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center"
android:textSize="18sp"
android:text="Age: 30"/>
<TextView
android:id="@+id/tvPlace"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Place: Kochi"/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
图片: 当用户点击 textview age 时,它应该增加 10 年的年龄
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。