[英]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.