如何使我的ExpandableListView等待加载,直到填充HashMap?

头痛熊猫

我在android中使用ExpandableListView,但问题是我的代码在填充HashMap之前就已加载此代码,因此它显示了一个空的ListView。

我加载我的ExpandableListView的片段是这个片段:

package com.example.arno.eventaris.Fragment;


import android.app.Activity;
import android.app.DialogFragment;
import android.net.wifi.WifiConfiguration;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;




import com.example.arno.eventaris.Activity.MainActivity;
import com.example.arno.eventaris.Error.ErrorJason;

import com.example.arno.eventaris.Expandable.ExpandableListAdapter;
import com.example.arno.eventaris.R;


import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.ExpandableListView.OnGroupCollapseListener;
import android.widget.ExpandableListView.OnGroupExpandListener;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.widget.Toast;



/**
 * A simple {@link Fragment} subclass.
 */
public class HomeFragment extends Fragment {

    private OnHomeFragmentInteractionListener mListener;
    private View view;

    private ExpandableListAdapter listAdapter;
    private ExpandableListView expListView;
    private List<String> listDataHeader;
    private HashMap<String, List<String>> listDataChild;
    private HashMap<String,HashMap<String,String>> events;

    public HomeFragment() {
        // Required empty public constructor
    }




    @Override
    public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ((MainActivity)getActivity()).populateEvents();

        events = ((MainActivity)getActivity()).getEvents();

        view=inflater.inflate(R.layout.fragment_home, container, false);


        // get the listview
        expListView = (ExpandableListView) view.findViewById(R.id.lvExp);

        // preparing list data
        prepareListData();

        listAdapter = new ExpandableListAdapter(getActivity(), listDataHeader, listDataChild);

        // setting list adapter
        expListView.setAdapter(listAdapter);



        return view;
    }



    /*
     * Preparing the list data
     */
    private void prepareListData() {



        listDataHeader = new ArrayList<String>();
        listDataChild = new HashMap<String, List<String>>();

        // Adding child data
        listDataHeader.add("A");
        listDataHeader.add("B");
        listDataHeader.add("C");
        listDataHeader.add("D");
        listDataHeader.add("E");
        listDataHeader.add("F");
        listDataHeader.add("G");
        listDataHeader.add("H");
        listDataHeader.add("I");
        listDataHeader.add("J");
        listDataHeader.add("K");
        listDataHeader.add("L");
        listDataHeader.add("M");
        listDataHeader.add("N");
        listDataHeader.add("O");
        listDataHeader.add("P");
        listDataHeader.add("Q");
        listDataHeader.add("R");
        listDataHeader.add("S");
        listDataHeader.add("T");
        listDataHeader.add("U");
        listDataHeader.add("V");
        listDataHeader.add("W");
        listDataHeader.add("X");
        listDataHeader.add("Y");
        listDataHeader.add("Z");
        listDataHeader.add("*");

        // Adding child data
        List<String> A = new ArrayList<String>();
        List<String> B = new ArrayList<String>();
        List<String> C = new ArrayList<String>();
        List<String> D = new ArrayList<String>();
        List<String> E = new ArrayList<String>();
        List<String> F = new ArrayList<String>();
        List<String> G = new ArrayList<String>();
        List<String> H = new ArrayList<String>();
        List<String> I = new ArrayList<String>();
        List<String> J = new ArrayList<String>();
        List<String> K = new ArrayList<String>();
        List<String> L = new ArrayList<String>();
        List<String> M = new ArrayList<String>();
        List<String> N = new ArrayList<String>();
        List<String> O = new ArrayList<String>();
        List<String> P = new ArrayList<String>();
        List<String> Q = new ArrayList<String>();
        List<String> R = new ArrayList<String>();
        List<String> S = new ArrayList<String>();
        List<String> T = new ArrayList<String>();
        List<String> U = new ArrayList<String>();
        List<String> V = new ArrayList<String>();
        List<String> W = new ArrayList<String>();
        List<String> X = new ArrayList<String>();
        List<String> Y = new ArrayList<String>();
        List<String> Z = new ArrayList<String>();
        List<String> anders = new ArrayList<String>();

        for(String key : events.keySet())
        {
            String eersteLetter = Character.toString(key.charAt(0));

            switch(eersteLetter)
            {
                case "a" : A.add(key);
                    break;
                case "b" : B.add(key);
                    break;
                case "c" : C.add(key);
                    break;
                case "d" : D.add(key);
                    break;
                case "e" : E.add(key);
                    break;
                case "f" : F.add(key);
                    break;
                case "g" : G.add(key);
                    break;
                case "h" : H.add(key);
                    break;
                case "i" : I.add(key);
                    break;
                case "j" : J.add(key);
                    break;
                case "k" : K.add(key);
                    break;
                case "l" : L.add(key);
                    break;
                case "m" : M.add(key);
                    break;
                case "n" : N.add(key);
                    break;
                case "o" : O.add(key);
                    break;
                case "p" : P.add(key);
                    break;
                case "q" : Q.add(key);
                    break;
                case "r" : R.add(key);
                    break;
                case "s" : S.add(key);
                    break;
                case "t" : T.add(key);
                    break;
                case "u" : U.add(key);
                    break;
                case "v" : V.add(key);
                    break;
                case "w" : W.add(key);
                    break;
                case "x" : X.add(key);
                    break;
                case "y" : Y.add(key);
                    break;
                case "z" : Z.add(key);
                    break;
                default :  anders.add(key);
                    break;

            }
        }

        listDataChild.put(listDataHeader.get(0), A); // Header, Child data
        listDataChild.put(listDataHeader.get(1), B);
        listDataChild.put(listDataHeader.get(2), C);
        listDataChild.put(listDataHeader.get(3), D);
        listDataChild.put(listDataHeader.get(4), E);
        listDataChild.put(listDataHeader.get(5), F);
        listDataChild.put(listDataHeader.get(6), G);
        listDataChild.put(listDataHeader.get(7), H);
        listDataChild.put(listDataHeader.get(8), I);
        listDataChild.put(listDataHeader.get(9), J);
        listDataChild.put(listDataHeader.get(10), K);
        listDataChild.put(listDataHeader.get(11), L);
        listDataChild.put(listDataHeader.get(12), M);
        listDataChild.put(listDataHeader.get(13), N);
        listDataChild.put(listDataHeader.get(14), O);
        listDataChild.put(listDataHeader.get(15), P);
        listDataChild.put(listDataHeader.get(16), Q);
        listDataChild.put(listDataHeader.get(17), R);
        listDataChild.put(listDataHeader.get(18), S);
        listDataChild.put(listDataHeader.get(19), T);
        listDataChild.put(listDataHeader.get(20), U);
        listDataChild.put(listDataHeader.get(21), V);
        listDataChild.put(listDataHeader.get(22), W);
        listDataChild.put(listDataHeader.get(23), X);
        listDataChild.put(listDataHeader.get(24), Y);
        listDataChild.put(listDataHeader.get(25), Z);
        listDataChild.put(listDataHeader.get(26), anders);

    }


    @Override
    public void onAttach(Activity activity)
    {
        super.onAttach(activity);
        try{
            mListener = (OnHomeFragmentInteractionListener) activity;

        }
        catch (ClassCastException e)
        {
            throw new ClassCastException(activity.toString() + "must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach()
    {
        super.onDetach();
        mListener = null;
    }



    public interface OnHomeFragmentInteractionListener
    {



    }


}

问题是,我用于ExpandableListView的数据来自我在MaintActivity.Java中的HashMap中放入的JSON文件。

现在,它将遍历我的整个HomeFragment.java代码,直到最后,只有在这种情况发生时,它才开始执行以下代码行:

((MainActivity)getActivity()).populateEvents();

我已将其放在onCreateView方法的开头。我跟随调试器,所以我知道他遵循的顺序不是我想要的顺序。有没有办法确保他在创建ExpendableListView之前执行这一行代码?

拉米

我建议您使用AsyncTask来填充数据。您将在doInBackground()方法中加载数据,然后在中创建适配器onPostExecute()

1)创建您的AsyncTask类:

private class PopulatingTask extends AsyncTask<Void, Void, Boolean> {

         private ProgressDialog dialog;
         private MainActivity activity;

        public PopulatingTask (MainActivity activity) {
            this.activity = activity;
            dialog = new ProgressDialog(activity);
        }

        @Override
        protected void onPreExecute() {
            this.dialog.setMessage("Loading data...");
            this.dialog.show();
        }

        @Override
        protected Boolean doInBackground(Void... args) {
            try{    

                activity.populateEvents();

                events = activity.getEvents();

                // preparing list data
                prepareListData();

                return true;

             } catch (Exception e){
                Log.e("tag", "error", e);
                return false;
             }
          }

        @Override
        protected void onPostExecute(Boolean success) {

            listAdapter = new ExpandableListAdapter(activity, listDataHeader, listDataChild);

            // setting list adapter
            expListView.setAdapter(listAdapter);

            // dismiss the dialog
            if (dialog.isShowing()) {
                dialog.dismiss();
            }

            if (success) {
                Toast.makeText(activity, "OK", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(activity, "Error", Toast.LENGTH_LONG).show();
            }
        }
    }

2)将您的onCreateView()方法更改为:

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

        view=inflater.inflate(R.layout.fragment_home, container, false);

        // get the listview
        expListView = (ExpandableListView) view.findViewById(R.id.lvExp);

        // start the asyncTask
        new PopulatingTask((MainActivity)getActivity()).execute();

        return view;
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何等待直到Dart中加载了图像

来自分类Dev

如何等待直到容器视图中的视图被加载?

来自分类Dev

Ajax调用等待直到加载

来自分类Dev

我如何等待直到在React中获得调度结果

来自分类Dev

等待渲染图表,直到数据加载完毕

来自分类Dev

异步等待,直到加载表单才能继续

来自分类Dev

UITabBarController等待加载UIViewController直到选择Xamarin

来自分类Dev

WPF:在附加的属性中,如何等待直到视觉树正确加载?

来自分类Dev

如何仅使用javascript / CSS阻止UI直到页面加载等待图像

来自分类Dev

我如何等待删除的文件,直到我启动的程序完成使用它为止?

来自分类Dev

如何让我的python脚本等待,直到我告诉它在终端中继续执行?

来自分类Dev

我如何等待直到在Perl脚本中将某些内容写入日志文件

来自分类Dev

如何在Angular JS中等待,直到我的Web服务返回

来自分类Dev

如何在Selenium Web Driver中编写等待,直到下拉列表中的值被填充,然后单击按钮

来自分类Dev

如何等待,直到UploadStringAsync方法完成

来自分类Dev

如何使Excel RefreshAll等待关闭直到完成?

来自分类Dev

如何等待直到matplotlib动画结束?

来自分类Dev

AngularJS如何等待直到返回承诺

来自分类Dev

如何等待返回直到某个事件?

来自分类Dev

JavaScript-等待/阻止直到构造函数完全加载

来自分类Dev

必须等待执行jQuery,直到服务加载完毕

来自分类Dev

等待初始化,直到异步加载数据

来自分类Dev

必须等待执行jQuery,直到服务加载完毕

来自分类Dev

Rails 5,等待/加载屏幕直到模型准备好

来自分类Dev

Unity - 在 MainMenu 中等待直到场景完全加载

来自分类Dev

如何延迟 ng-init 方法直到我的范围变量完成加载?

来自分类Dev

显示加载屏幕,直到填充数据-React&Meteor

来自分类Dev

如何等待资源加载

来自分类Dev

在继续使用AutoHotkey之前,我如何等待Google Chrome加载网页?

Related 相关文章

  1. 1

    如何等待直到Dart中加载了图像

  2. 2

    如何等待直到容器视图中的视图被加载?

  3. 3

    Ajax调用等待直到加载

  4. 4

    我如何等待直到在React中获得调度结果

  5. 5

    等待渲染图表,直到数据加载完毕

  6. 6

    异步等待,直到加载表单才能继续

  7. 7

    UITabBarController等待加载UIViewController直到选择Xamarin

  8. 8

    WPF:在附加的属性中,如何等待直到视觉树正确加载?

  9. 9

    如何仅使用javascript / CSS阻止UI直到页面加载等待图像

  10. 10

    我如何等待删除的文件,直到我启动的程序完成使用它为止?

  11. 11

    如何让我的python脚本等待,直到我告诉它在终端中继续执行?

  12. 12

    我如何等待直到在Perl脚本中将某些内容写入日志文件

  13. 13

    如何在Angular JS中等待,直到我的Web服务返回

  14. 14

    如何在Selenium Web Driver中编写等待,直到下拉列表中的值被填充,然后单击按钮

  15. 15

    如何等待,直到UploadStringAsync方法完成

  16. 16

    如何使Excel RefreshAll等待关闭直到完成?

  17. 17

    如何等待直到matplotlib动画结束?

  18. 18

    AngularJS如何等待直到返回承诺

  19. 19

    如何等待返回直到某个事件?

  20. 20

    JavaScript-等待/阻止直到构造函数完全加载

  21. 21

    必须等待执行jQuery,直到服务加载完毕

  22. 22

    等待初始化,直到异步加载数据

  23. 23

    必须等待执行jQuery,直到服务加载完毕

  24. 24

    Rails 5,等待/加载屏幕直到模型准备好

  25. 25

    Unity - 在 MainMenu 中等待直到场景完全加载

  26. 26

    如何延迟 ng-init 方法直到我的范围变量完成加载?

  27. 27

    显示加载屏幕,直到填充数据-React&Meteor

  28. 28

    如何等待资源加载

  29. 29

    在继续使用AutoHotkey之前,我如何等待Google Chrome加载网页?

热门标签

归档