Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法清除ArrayAdapter_Java_Android_Listview_Android Arrayadapter - Fatal编程技术网

Java 无法清除ArrayAdapter

Java 无法清除ArrayAdapter,java,android,listview,android-arrayadapter,Java,Android,Listview,Android Arrayadapter,我有一个过滤器面板,通过回调从它和Firebase实时数据库中获取数据。我有一个if/else块。如果answer.size()==0为真(答案是过滤器值的列表),我将用列表填充适配器。如果为false,我希望清除一个适配器并获得一个空的ListView。 这是我的密码: public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,

我有一个过滤器面板,通过回调从它和Firebase实时数据库中获取数据。我有一个if/else块。如果
answer.size()==0
为真(答案是过滤器值的列表),我将用列表填充适配器。如果为false,我希望清除一个适配器并获得一个空的ListView。 这是我的密码:

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        verifyStoragePermissions(getActivity());
        ArrayList<PlayerRating> finalRatingList = new ArrayList<PlayerRating>();
        View view = inflater.inflate(R.layout.rating_fragment, container, false);
        button = view.findViewById(R.id.convertButton);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                alertSingleChoiceItems(); ;

            }});
        Database base = new Database();
        base.readTournaments(new Database.TournamentsCallback() { //reading data from Firebase using callback
            @RequiresApi(api = Build.VERSION_CODES.N)
            @Override
            public void onCallback(ArrayList<TournamentParameters> tournamentsList,
                                   ArrayList<String> tournamentsNames, ArrayList<String> answer) {
                ArrayList<PlayerRating>ratingList = new ArrayList<PlayerRating>();
                ArrayList<TournamentParameters> editableTournamentsList = new ArrayList<TournamentParameters>(tournamentsList);
                PlayerRatingAdapter adapter = new PlayerRatingAdapter(getActivity(), R.layout.rating_adapter_item, 
                        new ArrayList<PlayerRating>());
                ListView listview = (ListView) view.findViewById(R.id.ratingListView);
                if (answer.size() == 0) { // answer.size() is a size of an ArrayList with filters' values
                    ratingList.clear();
                    finalRatingList.clear();
                    HashMap<String, Integer> rating = new HashMap<String, Integer>();
                    //tournamentsList filling
                    ...

                    //ratingList filling
                    ...
                    
                    //ratingList sorting
                    ...
                    adapter = new PlayerRatingAdapter(getActivity(), R.layout.rating_adapter_item, ratingList);
                    adapter.notifyDataSetChanged();
                    ViewGroup header = (ViewGroup) inflater.inflate(R.layout.rating_listview_header,
                            listview, false);
                    listview.addHeaderView(header);
                    listview.setAdapter(adapter);
                    adapter.notifyDataSetChanged();

                }
                else {
                    ratingList.clear();
                    finalRatingList.clear();
                    adapter.clear();
                    adapter.notifyDataSetChanged();
                    Log.d("okey", "cleared!");
                    }
                Button filtersTV = getActivity().findViewById(R.id.filtersTV);
                filtersTV.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        showFragment();

                    }
                });    
                }
        });
        return view;
}
另外,当我设置filters方法
dismissFragment()
工作时(它负责使用ListView从我的过滤器面板片段返回到我的片段):

问题是我的适配器没有被清除。当代码转到
else
块并

ratingList.clear();
finalRatingList.clear();
adapter.clear();
adapter.notifyDataSetChanged();
Log.d("okey", "cleared!");
工作正常(我的日志中甚至有一条预期的消息),没有任何更改-我的ListView保持不变,没有任何内容被清除。
我应该在代码中更改什么?

您的代码中有两个不同的适配器实例。一个在if/else外部,一个在“if块”中。 这就是为什么在“else block”中清除它时,它不是同一个适配器。什么也没发生

在“if block”中再次初始化适配器的指令只需更新它,您的cide就会工作

public void dismissFragment() {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        if (!fragment.isAdded()) {
            transaction.add(R.id.frame, fragment, "filter");
        }
        transaction.replace(R.id.frame, new RatingFragment());
        transaction.addToBackStack(null);
        transaction.commit();
        //FragmentManager fm = getSupportFragmentManager();
        //fm.popBackStackImmediate();
    }

ratingList.clear();
finalRatingList.clear();
adapter.clear();
adapter.notifyDataSetChanged();
Log.d("okey", "cleared!");