当我按下后退按钮时,这个ShoppingActivity会被破坏,当我再次访问该activity时,我发现我的回收器视图项目被替换了两次。我该如何解决这个问题?
ShoppingActivity.java这里编写的所有代码和volley类也在这里调用,当我按下后退键并再次访问该活动时,我发现我的回收器视图项被替换了
@override protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(r.layout.activity_shopping);
recyclerView = (RecyclerView) findViewById(R.id.rv_recycler_view);
layoutManager = new LinearLayoutManager(this);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(layoutManager);
btn_sort_name = (Button) findViewById(R.id.btn_name);
btn_sort_price = (Button) findViewById(R.id.btn_price);
tv_total_products = (TextView) findViewById(R.id.totalproduct);
tv_apihits = (TextView) findViewById(R.id.apihits);
tv_total_products.setText(null);
if(savedInstanceState==null){
final JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET,
BaseUrl,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
int index = 0;
arrayList.clear();
while (index < response.length()) {
try {
JSONObject jsonObject = response.getJSONObject(index);
arrayList.add(new Items(jsonObject.getString("name"),
jsonObject.getString("description"),
jsonObject.getString("category"),
jsonObject.getDouble("price"),
jsonObject.getInt("quantity"),
jsonObject.getString("shipping"),
jsonObject.getString("location"),
jsonObject.getString("color"),
jsonObject.getString("link")));
da = jsonObject.getString("name");
Log.d(TAG, da);
index++;
total_products = index;
} catch (JSONException e) {
e.printStackTrace();
}
}
recyclerViewAdapter = new RecyclerViewAdapter(arrayList, ShoppingActivity.this);
recyclerView.setAdapter(recyclerViewAdapter);
tv_total_products.append(String.valueOf(total_products));
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG, "Error");
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(jsonArrayRequest);
}
recyclerView.addOnItemTouchListener(new RecyclerViewAdapter.ViewItemClick(getApplicationContext(), recyclerView,
new RecyclerViewAdapter.ItemClickListener() {
@Override
public void clickedItem(View view, int position) {
name = arrayList.get(position).getName();
description = arrayList.get(position).getDescription();
category = arrayList.get(position).getCategory();
shipping = arrayList.get(position).getShipping();
location = arrayList.get(position).getLocation();
color = arrayList.get(position).getColor();
link = arrayList.get(position).getLink();
price = arrayList.get(position).getPrice();
quantity = arrayList.get(position).getQuantity();
DataParcel dataParcel = new DataParcel(name, description, category, shipping, location, color, link, price, quantity);
Intent intent = new Intent(ShoppingActivity.this, DetailsViewActivity.class);
intent.putExtra("data", dataParcel);
startActivity(intent);
}
}));
}
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
这是我的DetailsViewActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details_view);
btn_back= (Button) findViewById(R.id.btn_back);
btn_link= (Button) findViewById(R.id.btn_link);
btn_share= (Button) findViewById(R.id.btn_share);
btn_sms= (Button) findViewById(R.id.btn_sms);
tv_description= (TextView) findViewById(R.id.tv_description);
tv_app_name= (TextView) findViewById(R.id.tv_app_name);
category= (Button) findViewById(R.id.category);
price= (Button) findViewById(R.id.price);
location= (Button) findViewById(R.id.location);
quantity= (Button) findViewById(R.id.quantity);
shipping= (Button) findViewById(R.id.shipping);
iv_star1= (ImageView) findViewById(R.id.star1);
iv_star2= (ImageView) findViewById(R.id.star2);
iv_star3= (ImageView) findViewById(R.id.star3);
iv_star4= (ImageView) findViewById(R.id.star4);
iv_item_image= (ImageView) findViewById(R.id.item_image);
Bundle bundle= getIntent().getExtras();
dataParcel= bundle.getParcelable("data");
category.setText(dataParcel.getCategory());
price.setText(String .valueOf(dataParcel.getPrice()));
quantity.setText("Avilable"+String.valueOf( dataParcel.getQuantity() ));
location.setText(dataParcel.getLocation());
shipping.setText("Shipping: "+dataParcel.getShipping());
tv_app_name.setText(dataParcel.getName());
tv_description.setText(dataParcel.getDescription());
}
@Override
protected void onStart() {
super.onStart();
btn_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
问题在于活动的生命周期,您可以在从另一个活动返回时检查第一个活动的实例是否还在。对于快速修复,您可以在使用数据填充arraylist之前清除它,这将在从另一个活动返回时清除先前添加的数据,您可以这样做
arrayList.clear();
之前
while(index<response.length())
在响应块上。但这只是一个快速的解决方案,而不是实际的解决方案,所以更好的方法是检查类的实例。
我正面临一个奇怪的错误,其中recyclerview只显示了一个项目。下面是我的recyclerview适配器的代码: 我已经在其他应用程序中使用了这段代码,它的工作非常完美。我已经检查了聊天数据,这也是完美的。 这里是指向git repo布局文件的链接:布局文件
我正试图添加数据在我的回收视图从火炉。我有带名字的文件(级别级别编号)但没有显示我的活动这是代码: 主要活动水平: 公共类级别活动扩展AppCompat活动{ } 水平调整器 公共类级别适配器扩展了RecyclerView。适配器 }
在我的应用程序中,我使用了一个回收器视图,它包含了许多项目,我想在项目之间显示一个点分隔线(分隔符),但它不起作用。我尝试创建一个可绘制的形状,但在添加DividerItemDecurity之后,在回收器视图项之间没有显示空间或线条。我也尝试过创建自定义DividerItemDecoration类,但对我来说都不起作用。注意:目前在我的可绘制形状被设置为矩形,我也尝试了线条。如何实现。任何帮助都将
我正在制作一个应用程序,其中有回收器视图。但我无法在我的应用程序中看到回收器视图。当我检查Logcat时,它显示'e/recyclerview:No adapter attached;正在跳过布局‘。为什么会发生这种情况,我该如何修复? 我的主要活动代码: 我的适配器(PostAdapter.java)类代码:
我刚开始在firebase工作。我设法上传了文本和图像,但是,我无法检索要显示在回收器视图中的图像,只能检索文本。我用的是毕加索依赖。我已经包括了我的主要活动。java类,该类负责显示从问题“我的适配器”中的firebase检索的回收器视图项。java类和模型类。我相信,在我将图像URI上载到firebase存储时,我可能犯了没有存储图像URI的错误,因此适配器无法检索图像位置。我想这可能是因为我
如何在swapCursor函数中实现回收器视图默认项添加/删除动画。notifyDataSetChanged()不会显示任何动画。