简体   繁体   English

单击操作栏菜单项时无法显示“进度”对话框

[英]Unable to show Progress dialog when actionbar menu item click

I have 3 menu items in action bar when I click any one of them data retrieved from webservice which is working fine. 当我单击从Web服务检索的任何数据时,在操作栏中我有3个菜单项,它们工作正常。 but while retrieving I need to show Progress dialog in the screen .I have tried different ways like starting in new thread, AsyncTask. 但是在检索时,我需要在屏幕上显示“进度”对话框。我尝试了不同的方法,例如从新线程AsyncTask开始。 But finally stuck. 但最后陷入困境。 Please can anyone help me out. 请任何人能帮助我。 Here is my complete code. 这是我完整的代码。

    import hello.aws.graph.BatteryGraph;

public class BatteryGraph extends AppCompatActivity {

    static ProgressDialog dialog = null;
    static String value;
    public static Menu menu;

    static ArrayList<TrackingBean> Battery;
    @Override
    protected void onCreate(Bundle savedInstanceState) {



        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_line_chart);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment()).commit();
        }


    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        Intent newIntent;


        switch (item.getItemId()) {



            case R.id.bb_menu_favorites:


                    value="favorites";
                    getData(value);

                    getSupportFragmentManager().beginTransaction().replace(R.id.container, new PlaceholderFragment()).commit();
                break;

            case R.id.bb_menu_mylist:

                    value="mylist";
                    getData(value);

                    getSupportFragmentManager().beginTransaction().replace(R.id.container, new PlaceholderFragment()).commit();

                break;

            case R.id.bb_menu_recents:

                    value="myrecents";
                   getData(value);

                    getSupportFragmentManager().beginTransaction().replace(R.id.container, new PlaceholderFragment()).commit();

                break;

        }
        return true;
    }
    public void getData(final String value)
    {

        AsyncCallWS task = new AsyncCallWS();
        try {
            task.execute().get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }

    /**
     * A fragment containing a line chart.
     */
    public static class PlaceholderFragment extends Fragment {

        private LineChartView chart;
        private LineChartData data;


        public PlaceholderFragment() {


        }

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


            View rootView = inflater.inflate(R.layout.fragment_line_chart, container, false);

            chart = (LineChartView) rootView.findViewById(R.id.chart);



            generateData();


            return rootView;
        }


        private void generateData() {


        /****This method used to Plot points on graph ****/




    }
    }

    private class AsyncCallWS extends AsyncTask<Void, Void, Void> {


        @Override
        protected void onPreExecute() {

            dialog = new ProgressDialog(BatteryGraph.this, R.style.MyTheme);

            dialog.setProgressStyle(android.R.style.Widget_ProgressBar_Small);

            dialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.cp_bar));

            dialog.setCancelable(false);
            dialog.show();
            getSupportFragmentManager().beginTransaction().replace(R.id.container, new PlaceholderFragment()).commit();



        }

        @Override
        protected Void doInBackground(Void... params) {

            Battery=WebService.getDataFromWS(value);

            return null;

        }

        @Override
        protected void onPostExecute(Void result) {

            if(dialog!=null||dialog.isShowing()) {
                dialog.dismiss();
            }

        }
    }



}

activity_line_chart.xml activity_line_chart.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="hello.aws.graph.BatteryGraph"
tools:ignore="MergeRootFrame" />

fragment_line_chart.xml fragment_line_chart.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="hello.aws.graph.BatteryGraph$PlaceholderFragment" >
<LinearLayout
android:id="@+id/l1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin1top"
android:orientation="vertical">
<lecho.lib.hellocharts.view.LineChartView
    android:id="@+id/chart"

    android:layout_width="match_parent"
    android:layout_height="match_parent" >

</lecho.lib.hellocharts.view.LineChartView>
</LinearLayout>
</RelativeLayout>

i hope it will help u... 我希望这会帮助你...

private class AsyncCallWS extends AsyncTask<Void, Void, Void> {


    @Override
    protected void onPreExecute() {

pDialog = new ProgressDialog(getActivity());//here activity name or if u are using fragment put getActivity()
        pDialog.setMessage("Loading...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.setCanceledOnTouchOutside(false);
        pDialog.show();
        getSupportFragmentManager().beginTransaction().replace(R.id.container, new PlaceholderFragment()).commit();



    }

    @Override
    protected Void doInBackground(Void... params) {

        Battery=WebService.getDataFromWS(value);

        return null;

    }

    @Override
    protected void onPostExecute(Void result) {

        if(dialog!=null||dialog.isShowing()) {
            pDialog.dismiss();
        }

    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM