progreso - progressbar android circle
¿Cómo implementar progressBar al cargar datos? (4)
Quiero implementar progressBar como en la imagen de abajo.
En este momento, tengo AsyncTask que se sperated de clases de fragmentos, y uso AsyncTask para cargar datos, y ahora tengo implemento el diálogo progressBar, pero quiero deshacerme de eso, porque quiero hacer un UX mejor.
Muestro el cuadro de diálogo ProgressBar en el método onPreExecute () y luego lo descartamos en PostExecute.
Entonces, ¿cómo puedo implementar la barra de progreso de fondo como en la imagen de abajo?
Con la misma asynctask usando publishProgress ()
Si solo desea mostrar el progreso, eche un vistazo a este código. Esto podría darte una idea: la actividad principal de clase pública amplía la actividad implementa OnClickListener {
myTask mytask = new myTask();
Button button1;
ProgressBar progressbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button) findViewById(R.id.button1);
progressbar = (ProgressBar) findViewById(R.id.progressBar);
button1.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View view) {
mytask.execute();
}
class myTask extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
progressbar.setProgress(0);
progressbar.setMax(100);
int progressbarstatus = 0;
};
@Override
protected String doInBackground(String... params) {
for (int i = 0; i < 20; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
progressbar.incrementProgressBy(10);
}
return "completed";
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
}
}
}
Pero si desea mostrar como un diálogo, eche un vistazo a este código:
public class YoutubeVideoMain extiende Activity {
ListView videolist;
ArrayList<String> videoArrayList = new ArrayList<String>();
ArrayAdapter<String> videoadapter;
Context context;
String feedURL = "https://gdata.youtube.com/feeds/api/users/twistedequations/uploads?v=2&alt=jsonc&start-index=1&max-results=5";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
setContentView(R.layout.youtubelist);
videolist = (ListView) findViewById(R.id.videolist);
videoadapter = new ArrayAdapter<String>(this, R.layout.video_list_item,
videoArrayList);
videolist.setAdapter(videoadapter);
VideoListTask loadertask = new VideoListTask();
loadertask.execute();
}
private class VideoListTask extends AsyncTask<Void, String, Void> {
ProgressDialog dialogue;
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
dialogue.dismiss();
videoadapter.notifyDataSetChanged();
}
@Override
protected void onPreExecute() {
dialogue = new ProgressDialog(context);
dialogue.setTitle("Loading items..");
dialogue.show();
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
HttpClient client = new DefaultHttpClient();
HttpGet getRequest = new HttpGet(feedURL);
try {
HttpResponse response = client.execute(getRequest);
StatusLine statusline = response.getStatusLine();
int statuscode = statusline.getStatusCode();
if (statuscode != 200) {
return null;
}
InputStream jsonStream = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(jsonStream));
StringBuilder builder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
String jsonData = builder.toString();
JSONObject json = new JSONObject(jsonData);
JSONObject data = json.getJSONObject("data");
JSONArray items = data.getJSONArray("items");
for (int i = 0; i < items.length(); i++) {
JSONObject video = items.getJSONObject(i);
videoArrayList.add(video.getString("title"));
}
Log.i("YouJsonData:", jsonData);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Tal vez esto pueda ayudarle.
class YourCLassName extends AsyncTask<String, Integer, Void> {
private ProgressDialog pd = new ProgressDialog(Files.this);
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
pd.setTitle("your message");
pd.show();
}
@Override
protected Void doInBackground(String... params) {
// YOUR PIECE OF CODE
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
pd.setMessage("Task Completed .. whatever");
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
}
Tipo,
Si realmente quiere una barra de progreso como la que publicó, simplemente puede establecer la propiedad indeterminada de la barra de progreso en verdadero :)
Puedes hacerlo bien en el código o directamente en el xml.
En codigo:
yourProgressBar.setIndeterminate(true);
En tu XML, simplemente establece el atributo indeterminado en verdadero.
Aquí hay un diseño simple como ejemplo:
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:indeterminate="true" />
</RelativeLayout>