简体   繁体   中英

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. but while retrieving I need to show Progress dialog in the screen .I have tried different ways like starting in new thread, 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

<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

<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();
        }

    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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