问题描述
昨天我问了有关简单ListView的类似问题,但是我对Expandable遇到了新的麻烦。 我想清除我的expListView。我通过清除放置在适配器中的List和HashMap来做到这一点
if(tournamentsAnswer.size() == 0){
...
} else {
listDataHeader.clear();
listDataChild.clear();
listadapter.notifyDataSetChanged();
}
但是我的列表视图保持不变。问题是否与参考相关?我检查了一下,似乎一切都很好。我应该改变什么? 这是完整的代码:
public class TournamentsFragment extends Fragment {
TournamentParameters findTournament(String name,ArrayList<TournamentParameters> tournamentsList){
for(TournamentParameters i : tournamentsList){
if (name.equals(i.getName())){
return i;
}
}
return null;
}
private Tournamentsviewmodel mviewmodel;
public static TournamentsFragment newInstance() {
return new TournamentsFragment();
}
static expandablelistadapter listadapter;
static List<String> listDataHeader;
static HashMap<String,List<String>> listDataChild;
Fragment fragment = new TournamentFiltersFragment();
private void showTournamentsFragment() {
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
if (!fragment.isAdded()) {
transaction.add(R.id.tournamentsframe,fragment,"filter");
}
transaction.addToBackStack(null);
transaction.commit();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
List<String> finalratingList = new ArrayList<String>();
final View view = inflater.inflate(R.layout.tournaments_fragment,container,false);
Database base = new Database();
base.readTournaments(new Database.TournamentsCallback() {
@Override
public void onCallback(ArrayList<TournamentParameters> tournamentsList,ArrayList<String> tournamentsNames,ArrayList<String> tournamentsAnswer,ArrayList<String> ratingAnswer,ArrayList<PlayerParameters> playersList) {
listDataHeader = tournamentsNames;
Collections.sort(listDataHeader);
List<String> editableListDataHeader = new ArrayList<String>(listDataHeader);
listDataChild = new HashMap<String,List<String>>();
HashMap<String,ArrayList<String>> playerInfo = new HashMap<String,ArrayList<String>>();
HashMap<String,Integer> rating = new HashMap<String,Integer>();
for (TournamentParameters j : tournamentsList) {
ArrayList<String> infoList = new ArrayList<String>();
if (j.getType().equals("de")){
infoList.add("Тип: " + "Double Elimination");
}
else if (j.getType().equals("se3")){
infoList.add("Тип: " + "Single Elimination (матч за 3е место)");
}
else{
infoList.add("Тип: " + "Single Elimination");
}
infoList.add("Вес: " + j.getWeight());
for (String place : j.getPlaces().keySet()){
infoList.add(place + " место: " + j.getPlaces().get(place).toString()
.substring(1,j.getPlaces().get(place).toString().length() - 1)
+ " — " + j.getPoints(place) * Integer.parseInt(j.getWeight()) + " очков");
}
Comparator<String> comp = new Compare();
Collections.sort(infoList.subList(2,infoList.size()),comp);
playerInfo.put(j.getName(),infoList);
}
for (int i = 0; i < listDataHeader.size(); i++){
listDataChild.put(listDataHeader.get(i),playerInfo.get(listDataHeader.get(i)));
}
ExpandableListView expListView = view.findViewById(R.id.lvExp);
Button filtersTV = getActivity().findViewById(R.id.tournamentsFiltersTV);
if (tournamentsAnswer.size() == 0) {
listadapter = new expandablelistadapter(getActivity(),listDataHeader,listDataChild);
listadapter.notifyDataSetChanged();
expListView.setAdapter(listadapter);
expListView.setonGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent,View v,int groupPosition,long id) {
// Toast.makeText(getApplicationContext(),// "Group Clicked " + listDataHeader.get(groupPosition),// Toast.LENGTH_SHORT).show();
return false;
}
});
listadapter.notifyDataSetChanged();
}
else {
listDataHeader.clear();
listDataChild.clear();
listadapter.notifyDataSetChanged();
}
filtersTV.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showTournamentsFragment();
}
});
}
});
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mviewmodel = viewmodelProviders.of(this).get(Tournamentsviewmodel.class);
// Todo: Use the viewmodel
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)