我想在下图中实现progressBar。
现在,我有AsyncTask来自片段类,我使用AsyncTask来加载数据,现在我已经实现了progressBar对话框,但我想摆脱它,因为我想要做一个更好的用户体验
我在onPreExecute()方法中显示了ProgressBar对话框,然后将它解除为onPostExecute。
那么,我如何实现后面的进度条,如下图所示
答案 0 :(得分:7)
哥们,
如果您真的只想要一张像您发布的图片的进度条,只需将进度条 indeterminate 属性设置为true即可:)
您可以使用代码或直接在xml上执行操作。
在代码中:
yourProgressBar.setIndeterminate(true);
在XML中,只需将属性indeterminate设置为true即可。
这是一个简单的布局作为例子:
<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>
答案 1 :(得分:2)
如果您只想显示进度,请查看此代码。这可能会给你一个想法: 公共类MainActivity扩展Activity实现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);
}
}
}
但是如果你想像对话一样显示,请看一下这段代码:
公共类YoutubeVideoMain扩展了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;
}
}
也许这可以帮到你。
答案 2 :(得分:0)
答案 3 :(得分:0)
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);
}
}