从另一个片段

时间:2016-11-27 17:55:30

标签: android listview android-adapter

大家好,我是第一次来这里,所以如果我的问题有一些错误,请通知我纠正自己。我的问题在于我认为的适配器。我的应用程序有3个片段选项卡。在每个选项卡中,我有一个带有一些项目的ListView。此外,我在每个选项卡中都有按钮,用于更新,删除或添加项目。我通过弹出AleartDialog来添加新项目或单击列表中的项目来更新或删除它。因此,在我登录我的应用程序后,我可以按照该列表执行任何操作。这不是一个问题。我可以旋转屏幕,我的列表仍然更新。更改标签也不是问题。当我转到其他片段时,我点击按钮添加或者更新某些项目并弹出AleartDialog。之后,当我关闭它时,我返回第一个标签。尝试添加项目不会更新列表,我看到相同的项目。从列表中删除项目然后抛出异常IndexOutOfBounds,因为该项目不在列表中。我想我正确使用arrayAdapter.notifyDataSetChanged()。在这里,我将分享一些其他代码。

就像我更新我的列表一样。在jsonObject中列出带有项目。

private void fillList(Gson gson, String jsonObject) {
listWithNames.clear();
Type collectionType = new TypeToken<ArrayList<PersonalSaveDTO>>() {
}.getType();

personalSaveList = gson.fromJson(jsonObject, collectionType);
Log.wtf(TAG, "OT REQUEST: " + personalSaveList);
  for (int i = 0; i < personalSaveList.size(); i++) {
    listWithNames.add(personalSaveList.get(i).getName());
  }
  Log.wtf(TAG, "fillList: " + listWithNames);
  getActivity().runOnUiThread(new Runnable() {
    @Override
    public void run() {
      arrayAdapter.notifyDataSetChanged();
      buttonEnable(true);
    }
  });
}

就像我开始片段一样。

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                       Bundle savedInstanceState) {

final View viewFragment = inflater.inflate(R.layout.user_fragment, container, false);
listViewUser = (ListView) viewFragment.findViewById(R.id.listViewForUser);
addItem = (Button) viewFragment.findViewById(R.id.buttonAddUserElements);
updateList = (Button) viewFragment.findViewById(R.id.refreshListUser);
updateList.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {
    makeRequestForList(viewFragment);
  }
});
addItem.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {
    addElement(viewFragment);
  }
});
configureArrayAdapter(viewFragment);
setListenerForUserList(viewFragment);
if (savedInstanceState != null) {
  isRequestMade = savedInstanceState.getBoolean("isRequestMade");
  listWithNames = savedInstanceState.getStringArrayList("listWithNames");
  personalSaveList = savedInstanceState.getParcelableArrayList("personalSaveList");
  arrayAdapter.addAll(listWithNames);
  arrayAdapter.notifyDataSetChanged();
}

if (!isRequestMade) {
  makeRequestForList(viewFragment);
  isRequestMade = true;
}
return viewFragment;

}

以下是我创建适配器的方法。

  private void configureArrayAdapter(View view) {
listWithNames = new ArrayList<>();
arrayAdapter = new ArrayAdapter<String>(view.getContext(),
    R.layout.list_personal_group_fragment, R.id.adapterFragmentPersonalGroups, listWithNames);
arrayAdapter.clear();
listViewUser.setAdapter(arrayAdapter);
}

0 个答案:

没有答案