我的应用程序中有两个激活的 A 和 B。 我使用 JSON 从 API 加载数据,并使用 getter setter 方法将该数据存储在列表视图中在活动 A 中。现在我想在启动 B 活动后在 ListView 中维护数据,当我从 B 返回到 A 活动时,我不会再次从 JSON 下载数据。
我现在正在通过字符串中的 sotirng API 响应来做到这一点,从 B 返回到 A 后,我将 json 字符串传递给适配器,但加载列表视图仍然需要时间
任何知道如何防止加载时间并在我从 B 返回 A 时立即获取数据。
这是我的活动 A 的代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_product_list);
pref =getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
editor = pref.edit();
itemCount_database = new ItemCount_database(this);
item_adding_cart = new Item_adding_cart(this);
String fromhome =pref.getString("from_product_view_back_Btn","");
if(fromhome.equals("yes"))
{
editor.putString("from_product_view_back_Btn","no");
editor.commit();
overridePendingTransition(R.anim.right_in, R.anim.right_out);
stored_json();
recycler_adapter = new Product_list_Recycler_Adapter(this,datalist);
recyclerView.setAdapter(recycler_adapter);
recycler_adapter.setListener(ProductList_Activity.this);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
}
else
{
overridePendingTransition(R.anim.left_in, R.anim.left_out);
pDialog = new ProgressDialog(this);
pDialog.setMessage("Loading...");
pDialog.show();
jsoncall();
}
initialised_actionbar();
checkout = (TextView)findViewById(R.id.txt_checkout_product_list);
txt_total_amount =(TextView)findViewById(R.id.total_amount_in_checkout_label);
checkout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent myint = new Intent(ProductList_Activity.this,Cart.class);
startActivity(myint);
}
});
footer =(LinearLayout) findViewById(R.id.footer);
footer.setVisibility(View.GONE);
cart_item_count =item_adding_cart.total_product_count(1);
if(cart_item_count==0 )
{
footer.setVisibility(View.GONE);
cart_count_background.setVisibility(View.GONE);
}
else
{
footer.setVisibility(View.VISIBLE);
cart_count_background.setVisibility(View.VISIBLE);
}
wishlist_item_count = item_adding_cart.getrowcount_wishlist();
if(wishlist_item_count==0)
{
wishlist_count_backround.setVisibility(View.GONE(; } 还 { wishlist_count_backround.setVisibility(View.VISIBLE(; }
recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
initialization();
hidePDialog();
}
}, 3000);
boolean popup_once=pref.getBoolean("total_item_cart_insert_qery",true);
if(popup_once)
{
editor.putBoolean("total_item_cart_insert_qery",false);
editor.commit();
item_adding_cart.insert_total_item_in_cart(0);
}
}
public void jsoncall() {
final HashMap<String, String> params = new HashMap<String, String>();
params.put("sub_cate_id","24");
params.put("city_id","3");
CustomRequest_JsonObject servicelistrequest = new CustomRequest_JsonObject
(/*Request.Method.POST,*/
url,
params,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
stored_json_string = response.toString();
editor.putString("stored_json_prodcutlist",stored_json_string);
editor.commit();
try {
JSONArray data = response.getJSONArray("data");
for (int ie = 0; ie < data.length(); ie++) {
JSONObject dataobje = data.getJSONObject(ie);
ModelData_Product_list_act Model = new ModelData_Product_list_act();
Model.setProduct_id(dataobje.getString("product_id"));
Model.setTitle(dataobje.getString("title"));
Model.setImage(dataobje.getString("product_image"));
Model.setWieght(dataobje.getString("weight"));
Model.setLatest_price(dataobje.getString("mrp"));
Model.setDiscount(dataobje.getString("discount"));
Model.setPre_price(dataobje.getString("retail_price"));
Model.setUnit(dataobje.getString("unit"));
datalist.add(Model);
loadlistview();
}
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_LONG).show();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
hidePDialog();
Toast.makeText(getApplicationContext(), "error : " + error.getMessage(), Toast.LENGTH_LONG).show();
}
}
);
AppController.getInstance().addToRequestQueue(servicelistrequest);
}
public void stored_json() {
pDialog = new ProgressDialog(this);
pDialog.setMessage("Loading...");
pDialog.show();
String mystored_json = pref.getString("stored_json_prodcutlist","");
try {
JSONObject myjsonojb = new JSONObject(mystored_json);
JSONArray data = myjsonojb.getJSONArray("data");
for (int ie = 0; ie < data.length(); ie++) {
JSONObject dataobje = data.getJSONObject(ie);
ModelData_Product_list_act Model = new ModelData_Product_list_act();
Model.setProduct_id(dataobje.getString("product_id"));
Model.setTitle(dataobje.getString("title"));
Model.setImage(dataobje.getString("product_image"));
Model.setWieght(dataobje.getString("weight"));
Model.setLatest_price(dataobje.getString("mrp"));
Model.setDiscount(dataobje.getString("discount"));
Model.setPre_price(dataobje.getString("retail_price"));
Model.setUnit(dataobje.getString("unit"));
datalist.add(Model);
// loadlistview();
}
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_LONG).show();
}
}
不使用 startActivity 使用 startActivityForResult(yourIntent,REQ_CODE(
Intent startActivity = new Intent(context,ClassName.class);
startActivityForResult(startActivity,REQ_CODE);
从活动B回来后,可以从活动发送您的列表,并可以进入活动A。
然后 onActivityResult 回调方法获取你的意图数据
我有另一个想法使用后台任务是在创建并将其存储到本地数据库,并在简历中显示来自本地数据库的数据.您总是从本地数据库调用列表视图,所以当你回到 b 恢复时会调用,所以它不会调用创建,所以它不会调用后台数据