当我在 Recycler View 中添加新的数据项(从 Activity 到 Activity)时,当前项丢失了。插入新项目后如何不错过回收站 View 中的当前数据? 谢谢。
更新
这是我的代码:
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class RecyclerActivity extends AppCompatActivity implements View.OnClickListener{
private RecyclerView listRecyclerView;
private StaggeredGridLayoutManager gaggeredGridLayoutManager;
private List<GetItemData> getItemDataList = new ArrayList<>();
private Button btnBack;
private MyAdapter myAdapter;
final int[] mfp_photo = {R.drawable.dg, R.drawable.er, R.drawable.ib,
R.drawable.m, R.drawable.md, R.drawable.mk, R.drawable.r, R.drawable.rf,
R.drawable.rn, R.drawable.sm};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view);
listRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
listRecyclerView.setHasFixedSize(true);
gaggeredGridLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
listRecyclerView.setLayoutManager(gaggeredGridLayoutManager);
Bundle bundle = getIntent().getExtras();
GetItemData getItemData = new GetItemData(bundle.getString("Name"), bundle.getString("Age"), bundle.getString("Date of Birth"),
bundle.getString("Address"), bundle.getString("Gender"), bundle.getInt("list_length"));
myAdapter = new MyAdapter(getItemDataList, this);
myAdapter.addItem(getItemData);
listRecyclerView.setAdapter(myAdapter);
btnBack = (Button) findViewById(R.id.buttonBack);
btnBack.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.buttonBack:
Intent intent = new Intent(this, new MainActivity().getClass());
startActivity(intent);
break;
default:break;
}
}
class MyViewHolder extends RecyclerView.ViewHolder {
public ImageView fp_photo;
public TextView fp_name;
public MyViewHolder(View itemView) {
super(itemView);
fp_name = (TextView) itemView.findViewById(R.id.fp_name);
fp_photo = (ImageView) itemView.findViewById(R.id.fp_photo);
}
}
class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
Context context;
private List<GetItemData> getItemDataList_Adapter;
public MyAdapter(List<GetItemData> getItemDataList_Adapter, Context context) {
super();
this.context = context;
this.getItemDataList_Adapter = getItemDataList_Adapter;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (parent.getTag() != null) {
return (MyViewHolder)(parent.getTag());
} else {
View view = LayoutInflater.from(context).inflate(R.layout.cardview, parent, false);
MyViewHolder viewHolder = new MyViewHolder(view);
return viewHolder;
}
}
@Override
public void onBindViewHolder(MyViewHolder holder,int position) {
Random rand = new Random();
int _rpositon = rand.nextInt(mfp_photo.length);
holder.fp_photo.setImageResource(mfp_photo[position]);
holder.fp_name.setText(getItemDataList_Adapter.get(position).getName());
}
@Override
public int getItemCount() {
return getItemDataList_Adapter.size();
}
public void addItem(GetItemData Data) {
getItemDataList_Adapter.add(Data);
notifyDataSetChanged();
}
}
}
数据是从 MainActivity 获取到此 Activity 的,但是当我将新项目添加到 RecylerView 时,现有项目丢失了。
最佳答案
我相信您正在寻找制作 List<GetItemData> getItemDataList
一个全局变量,这样它的值就可以跨 Activity 使用。在 android 术语中,您正在尝试拥有 getItemDataList
的应用程序上下文。
为此,首先创建一个应用程序类 MyApp.java,
public class MyApp extends Application {
private ArrayList<ItemData> dataList;
public ArrayList<ItemData> getDataList() {
return dataList;
}
public void setDataList(ArrayList<ItemData> dataList) {
this.dataList = dataList;
}
public void addData(ItemData data){
if(dataList == null){
dataList = new ArrayList<>();
}
dataList.add(data);
}
}
现在,将这个类添加为 android:name
对于 list 中的应用程序标签,
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tony.myapp">
<application
android:name=".MyApp"
.....>
在 MainActivity 中:
ItemData itemData = new ItemData("John Doe", "16",
"15 July 2000",
"Address", "Male", 10);
MyApp myApp = (MyApp) getApplicationContext();
myApp.addData(itemData);
// Logic for going to RecyclerActivity here.
// No need to pass getItemData as a bundle.
然后,您需要在 RecyclerActivity 中做的就是,
MyApp myApp = (MyApp) getApplicationContext();
List<ItemData> itemDataList = myApp.getDataList();
myAdapter = new MyAdapter(itemDataList, this);
listRecyclerView.setAdapter(myAdapter);
建议
看起来您的 Java 命名约定搞砸了。例如,类名和变量名应该始终是名词,切勿使用动词。引用Naming Conventions获取更多信息。
关于android - 插入新项目后如何在回收站 View 中不丢失当前数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38380454/