java - 单击片段中的后退按钮后,Listview 正在更新
问题描述
在这里,我试图从 URL 获取数据并显示在片段 A 的 Listview 中。它工作得很好。但是在单击列表视图的项目时,它会导航到下一个片段 B。当我使用后退按钮从片段 B 导航到片段 A 时,列表视图项目会再次更新。如果列表视图中有 3 个项目,并且用户从 B 导航到 A 2 次,那么总没有。Listview 中的项目数将为 9。请帮助停止这种冗余
public class EnglishFragment extends Fragment {
private List<DataItem> dataFeed= new ArrayList<DataItem>();
ListView listView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
final ArrayAdapter<DataItem> adapter = new EnglishFragment.Adapter();
View view;
view = inflater.inflate(R.layout.fragment_topic2,container,false);
RequestQueue queue = Volley.newRequestQueue(getActivity());
// JsonObjectRequest myReq= new JsonObjectRequest(Request.Method.GET,
listView = view.findViewById(R.id.listview);
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, **URL**, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray dataArray = response.getJSONArray("topic");
Log.i("Temp",""+dataArray.length());
for(int i=0;i<dataArray.length();i++) {
JSONObject temp = dataArray.getJSONObject(i);
Log.i("Temp",temp.toString());
String first_name = temp.getString("name");
String last_name = temp.getString("details");
String image_path =temp.getString("img_path");;
String chapter_path = temp.getString("url");
Log.i("Image",temp.getString("url"));
dataFeed.add(new DataItem(first_name,last_name," "," ", image_path,chapter_path));
adapter.notifyDataSetChanged();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
jsonObjectRequest.setRetryPolicy( new DefaultRetryPolicy(10000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
queue.add(jsonObjectRequest);
listView.setAdapter( adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
DataItem currentItem = dataFeed.get(position);
Log.v("position", currentItem.getImageURL());
Toast.makeText(getActivity(), currentItem.getChapterURL(), Toast.LENGTH_SHORT).show();
MainActivity mainActivity = (MainActivity)getActivity();
mainActivity.getChapterList(currentItem.getChapterURL());
}
});
return view;
}
private class Adapter extends ArrayAdapter<DataItem> {
public Adapter() {
super(getActivity(), R.layout.data_items,dataFeed);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
if (convertView == null)
{
convertView = getLayoutInflater().inflate(R.layout.data_items,null,false);
}
DataItem currentItem = dataFeed.get(position);
TextView heading = (TextView)convertView.findViewById(R.id.subject_name);
TextView desc = (TextView)convertView.findViewById(R.id.subject_details);
ImageView imageView = (ImageView)convertView.findViewById(R.id.leftIcon);
heading.setText(currentItem.getNewsHeading() + " ");
desc.setText(Html.fromHtml(currentItem.getNewsDesc()));
imageView.setImageResource(currentItem.getImageId());
Picasso.get().load(currentItem.getImageURL()).into(imageView);
return convertView;
}
}
MainActivity.getChapterURL() 的代码
public void getChapterList(String ChapterURL ){
FragmentManager fragmentManager = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ChapterListFragment chapterListFragment = new ChapterListFragment();
Bundle bundle = new Bundle();
bundle.putString("url",ChapterURL);
chapterListFragment.setArguments(bundle);
fragmentTransaction.replace(R.id.frame_container,chapterListFragment).addToBackStack(null)
.commit();
}
解决方案
在添加新数据之前清除 dataFeed 列表... dataFeed.clear()
推荐阅读
- android - Flutter 应用程序(飞镖)仅在特定区域启用订单,否则显示消息“您所在区域尚不可用”
- java - 如何访问对象的字段
- javascript - 角度多维数组赋值
- c# - 如何在 asp.net-core 中将 URL 重写为子域,而无需在 dot net core 上实际创建子域
- python - 是否可以使用文本包含通过它的 CSS 来查找元素?
- python - Python循环遍历元组列表,从熊猫数据框中添加一个值
- r - 根据向量中包含的多个条件创建向量
- kubernetes - 如何先创建命名空间?
- guice - 构造函数有附加参数时关于guice构造注入的问题
- r - R Shiny plot透明背景:低分辨率(轴文本和标签周围的白色像素,以及标题)