如何显示进度条(圆圈)在一个活动有一个列表视图之前加载列表视图的数据

我有一个 ListView在我的第二个 activity.OnItemClick的它,我调用了一个网络服务,并试图获取数据。之后,我移动到第三个活动,也有一个 ListView的描述以前的活动 ListView项目。

在填充此 ListView之前,我想显示一个进度对话框。

我不知道怎么在 ListView上做? 有人知道怎么做吗?

我的密码

Third Activity.java

   package com.google.iprotect;


import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;


import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.xmlpull.v1.XmlPullParserException;


import com.google.iprotect.layout.TitleBarLayout;


import android.app.Activity;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.content.res.XmlResourceParser;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.TextView;


public class ThirdActivity extends ListActivity implements OnItemClickListener{


JSONArray jArray1,jArray2;
String one,two,three,tablename;
String color,r;
JSONObject responseJSON;
TitleBarLayout titlebarLayout;
final ArrayList<Tables> arraylist = new ArrayList<Tables>();
TextView tableName;
ColorStateList colorStateList1;
String email1,password1;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.thirdactivity);


ListView lv=getListView();
lv.setOnItemClickListener(this);




tablename=getIntent().getExtras().getString("Table Name");
email1 = getIntent().getExtras().getString("email");
password1 =getIntent().getExtras().getString("password");


titlebarLayout = new TitleBarLayout(ThirdActivity.this);
titlebarLayout.setLeftButtonText("go Back");
titlebarLayout.setRightButtonText("Logout");
titlebarLayout.setTitle(tablename);
titlebarLayout.setLeftButtonSize(70,40);
titlebarLayout.setRightButtonSize(70,40);
//titlebarLayout.setLeftButtonLeftDrawable(R.drawable.refresh);


//titlebarLayout.setRightButtonLeftDrawable(R.drawable.buttonrefresh);
//titlebarLayout.setLeftButtonBackgroundColor(Color.rgb(255,255,255));
//titlebarLayout.setRightButtonBackgroundColor(Color.rgb(34,49,64));
//titlebarLayout.setLeftButtonTextColor(Color.rgb(255,255,255));
//titlebarLayout.setRightButtonTextColor(Color.rgb(255,255,0));


XmlResourceParser parser1 =getResources().getXml(R.color.colorstatelist);




try {
colorStateList1 = ColorStateList.createFromXml(getResources(), parser1);
titlebarLayout.setRightButtonTextColor(colorStateList1);
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {


e.printStackTrace();
}


OnClickListener listener = new OnClickListener() {


public void onClick(View v) {
// TODO Auto-generated method stub
if (v.getId() == R.id.left_button) {
Intent intent = new Intent(ThirdActivity.this,SecondActivity.class);
intent.putExtra("email", email1);
intent.putExtra("password", password1);
startActivity(intent);
finish();


} else if (v.getId() == R.id.right_button) {
Intent intent = new Intent(ThirdActivity.this,
MainActivity.class);
//intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
ThirdActivity.this.startActivity(intent);


}
}
};
titlebarLayout.setLeftButtonOnClickListener(listener);
titlebarLayout.setRightButtonOnClickListener(listener);




updateTableList();








}


private void updateTableList() {
// TODO Auto-generated method stub
//final ProgressDialog pd1=ProgressDialog.show(this, "Calling Webservice", "Waiting...", true, false);


final ProgressBar pbHeaderProgress = (ProgressBar) findViewById(R.id.pbHeaderProgress);


new AsyncTask<Void, Void, Void>() {




protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
pbHeaderProgress.setVisibility(View.VISIBLE);
}






protected Void doInBackground(Void... params) {
r = invokeWebService1(tablename);
//pd1.dismiss();


try {
responseJSON = new JSONObject(r);
//json reading
jArray1 = responseJSON.getJSONArray("FirstThree");//get JSONArray jArray1 from JSONObject with name FirstThree
jArray2 = responseJSON.getJSONArray("Color");//get JSONArray jArray2 from JSONOobject with name Color
JSONObject json_data1 = null;
JSONObject json_data2 = null;


for (int i = 0; i < jArray1.length(); i++) {
json_data1 = jArray1.getJSONObject(i);//get JSONObject json_data1 from JSONArray at index i;
one = json_data1.getString("One");//get value from JSONObject json_data1 with key "One"
two = json_data1.getString("Two");
three = json_data1.getString("Three");
json_data2 = jArray2.getJSONObject(i);
color = json_data2.getString("color");//get value from JSONObject json_data2 with key "color"


Tables tables = new Tables();
//set value to Tables Class
tables.column1 = one;
tables.column2 = two;
tables.column3 = three;
tables.tableName=tablename;
tables.color=color;
//add Tables object into ArrayList<Tables>
arraylist.add(tables);


Log.i("ONE", json_data1.getString("One"));
Log.i("TWO", json_data1.getString("Two"));
Log.i("THREE", json_data1.getString("Three"));
Log.i("color",""+ json_data2.getString("color"));
}


} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}


protected void onPostExecute(Void result) {
pbHeaderProgress.setVisibility(View.GONE);


//Custom Adapter for ListView
TableDetailAdapter adaptor = new TableDetailAdapter(ThirdActivity.this,
R.layout.table_data_list_item, arraylist);
setListAdapter(adaptor);
}
}.execute();


}


protected String invokeWebService1(String tablename2) {
// TODO Auto-generated method stub
String response = "";
try {
WebService webService = new WebService(
"http://sphinx-solution.com/iProtect/api.php?");


// Pass the parameters if needed
Map<String, String> params = new HashMap<String, String>();
params.put("action", "getTableRecords");
params.put("tablename", tablename2);
params.put("email", email1);
params.put("password", password1);


// Get JSON response from server the "" are where the method name
// would normally go if needed example
response = webService.WebGet("auth", params);


} catch (Exception e) {
Log.d("Error: ", e.getMessage());
}
return response;
}




public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
// TODO Auto-generated method stub


Log.v("", "Click ListItem Number "+position);
Intent intent = new Intent(ThirdActivity.this,FourthActivity.class);
intent.putExtra("Json", responseJSON.toString());//sending json Object as a string to next activity
intent.putExtra("Table Name", tablename);
intent.putExtra("email", email1);
intent.putExtra("password", password1);
intent.putExtra("Item No", position);
startActivity(intent);


}


}

Xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/linlaHeaderProgress"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ThirdActivity" >


<include
android:id="@+id/titlebar"
layout="@layout/titlebar_layout" />


<ProgressBar
android:id="@+id/pbHeaderProgress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="2" >
</ProgressBar>


<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="260dp"
android:layout_weight="5.04">
</ListView>


<LinearLayout
android:layout_width="fill_parent"
android:layout_height="@dimen/titlebar_height"
android:layout_alignParentBottom="true"
android:background="@color/footer_bg_color"
android:gravity="bottom"
android:orientation="horizontal" >


<include
android:id="@+id/footer"
android:layout_height="@dimen/titlebar_height"
android:layout_gravity="bottom|center_horizontal"
layout="@layout/footer_layout" />
</LinearLayout>


</LinearLayout>
402498 次浏览

您正在扩展 ListActivity 吗?

如果是这样,在 xml 中放置一个循环进度对话框,其中包含以下行

<ProgressBar
android:id="@android:id/empty"
...other stuff...
/>

现在,进度指示器将显示,直到您拥有所有的列表视图信息,并设置适配器。此时,它将返回到 listview,进度条将消失。

有几种方法可以在加载 activity时显示进度条(圆)。对你来说,是一个带有 ListView的。

在 ACTIONBAR

如果您使用的是 ActionBar,您可以像这样调用 ProgressBar(这可以在您的 onCreate()

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setProgressBarIndeterminateVisibility(true);

显示完列表后,隐藏它。

setProgressBarIndeterminateVisibility(false);

在布局(XML)

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:orientation="vertical" >


<LinearLayout
android:id="@+id/linlaHeaderProgress"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone" >


<ProgressBar
android:id="@+id/pbHeaderProgress"
style="@style/Spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</ProgressBar>
</LinearLayout>


<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:cacheColorHint="@android:color/transparent"
android:divider="#00000000"
android:dividerHeight="0dp"
android:fadingEdge="none"
android:persistentDrawingCache="scrolling"
android:smoothScrollbar="false" >
</ListView>
</LinearLayout>

在你的活动中(Java) 我使用 AsyncTask 为我的列表获取数据:

// CAST THE LINEARLAYOUT HOLDING THE MAIN PROGRESS (SPINNER)
LinearLayout linlaHeaderProgress = (LinearLayout) findViewById(R.id.linlaHeaderProgress);


@Override
protected void onPreExecute() {
// SHOW THE SPINNER WHILE LOADING FEEDS
linlaHeaderProgress.setVisibility(View.VISIBLE);
}

onPostExecute()中,将适配器设置为 ListView后:

@Override
protected void onPostExecute(Void result) {
// SET THE ADAPTER TO THE LISTVIEW
lv.setAdapter(adapter);


// CHANGE THE LOADINGMORE STATUS TO PERMIT FETCHING MORE DATA
loadingMore = false;


// HIDE THE SPINNER AFTER LOADING FEEDS
linlaHeaderProgress.setVisibility(View.GONE);
}

编辑: 这是它在我的应用程序中的样子,而加载的几个 ListViews之一

enter image description here

我用这个来加载列表视图可能会有帮助。

Activity _ main. xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="5dp"
android:paddingRight="5dp" >


<LinearLayout
android:id="@+id/progressbar_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical" >


<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal" >


<ProgressBar
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal" />


<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
android:text="Loading data..." />
</LinearLayout>


<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="#C0C0C0" />
</LinearLayout>


<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="1dip"
android:visibility="gone" />


</RelativeLayout>

我的主要活动课是,

public class MainActivity extends Activity {
ListView listView;
LinearLayout layout;
List<String> stringValues;
ArrayAdapter<String> adapter;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);
layout = (LinearLayout) findViewById(R.id.progressbar_view);


stringValues = new ArrayList<String>();


adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, stringValues);


listView.setAdapter(adapter);
new Task().execute();
}


class Task extends AsyncTask<String, Integer, Boolean> {
@Override
protected void onPreExecute() {
layout.setVisibility(View.VISIBLE);
listView.setVisibility(View.GONE);
super.onPreExecute();
}


@Override
protected void onPostExecute(Boolean result) {
layout.setVisibility(View.GONE);
listView.setVisibility(View.VISIBLE);
adapter.notifyDataSetChanged();
super.onPostExecute(result);
}


@Override
protected Boolean doInBackground(String... params) {
stringValues.add("String 1");
stringValues.add("String 2");
stringValues.add("String 3");
stringValues.add("String 4");
stringValues.add("String 5");


try {
Thread.sleep(3000);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
}

这个活动显示进度为3秒,然后它将显示列表视图,而不是静态添加数据到字符串值列表,你可以从服务器中获取数据背景() ,并显示它。

ProgressDialog dialog = ProgressDialog.show(Example.this, "", "Loading...", true);

你可以做得更简单。
资料来源: 《 http://www.tutorialspoint.com/android/android_loading_spinner.htm 》
它帮助了我。

布局:

<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" />

在 xml 中定义它之后,必须在 java 文件中获取它的引用 它的语法如下:

private ProgressBar spinner;
spinner = (ProgressBar)findViewById(R.id.progressBar1);

之后,你可以让它消失,并在需要的时候把它带回来 它的语法如下:

spinner.setVisibility(View.GONE);
spinner.setVisibility(View.VISIBLE);

请使用 Tutorialspoint.com的样品。整个实现只需要几行代码,而不需要更改 xml 文件。希望这个能帮上忙。

步骤1: 导入库

import android.app.ProgressDialog;

步骤2: 声明 ProgressDialog 全局变量

ProgressDialog loading = null;

步骤3: 启动新的 ProgressDialog 并使用以下属性(请注意,本示例只包含基本的循环加载栏,没有实时进度状态)。

loading = new ProgressDialog(v.getContext());
loading.setCancelable(true);
loading.setMessage(Constant.Message.AuthenticatingUser);
loading.setProgressStyle(ProgressDialog.STYLE_SPINNER);

步骤4: 如果使用 AsyncTasks,可以开始在 onPreExecute 方法中显示对话框。否则,只需将代码放在按钮 onClick 事件的开头。

loading.show();

步骤5: 如果使用 AsyncTasks,可以通过将代码放在 onPostExecute 方法中来关闭进度对话框。否则,只需在关闭 onClick 事件之前放置代码。

loading.dismiss();

用我的 Nexus5安卓 v4.0.3进行了测试。祝你好运!

我用的是这个:

loading = ProgressDialog.show(example.this,"",null, true, true);

您可以将 ProgressBar添加到 listview 页脚:

private ListView listview;
private ProgressBar progressBar;

...

progressBar = (ProgressBar) LayoutInflater.from(this).inflate(R.layout.progress_bar, null);


listview.addFooterView(progressBar);

Layp/Progress _ bar. xml

<?xml version="1.0" encoding="utf-8"?>
<ProgressBar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/load_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
/>

当数据加载到适配器视图调用时:

        listview.removeFooterView(progressBar);

以可绘制的形式创建一个 xml 文件的任何名称(比如 Progress sBar.xml) 并在 color. xml 中添加 <color name="silverGrey">#C0C0C0</color>

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="720" >


<shape
android:innerRadiusRatio="3"
android:shape="ring"
android:thicknessRatio="6"
android:useLevel="false" >
<size
android:height="200dip"
android:width="300dip" />


<gradient
android:angle="0"
android:endColor="@color/silverGrey"
android:startColor="@android:color/transparent"
android:type="sweep"
android:useLevel="false" />


</shape>
</rotate>

现在在 listView 所在的 xml 文件中添加以下代码:

 <ListView
android:id="@+id/list_form_statusMain"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>


<ProgressBar
android:id="@+id/progressBar"
style="@style/CustomAlertDialogStyle"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_centerInParent="true"
android:layout_gravity="center_horizontal"
android:indeterminate="true"
android:indeterminateDrawable="@drawable/circularprogress"
android:visibility="gone"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"/>

方法中的 AsyncTask:

@Override
protected void onPreExecute()
{
progressbar_view.setVisibility(View.VISIBLE);


// your code
}

在 onPostExecute 中:

@Override
protected void onPostExecute(String s)
{
progressbar_view.setVisibility(View.GONE);


//your code
}

我建议您在使用 listview 或回收视图时使用 SwipeRefreshLayout

    <android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/swiperefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">


<android.support.v7.widget.RecyclerView
android:id="@+id/card_recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>


</android.support.v4.widget.SwipeRefreshLayout>

只包装你的视图,这将创建一个动画刷新时加载数据或滑动下来的屏幕,因为我们可以在许多应用程序。
下面是如何使用它的文档:
Https://developer.android.com/training/swipe/add-swipe-interface.html Https://developer.android.com/training/swipe/respond-refresh-request.html

编程愉快!

使用此内按钮 onClick 选项或您的需要。

final ProgressDialog progressDialog;
progressDialog = new ProgressDialog(getApplicationContext());
progressDialog.setMessage("Loading..."); // Setting Message
progressDialog.setTitle("ProgressDialog"); // Setting Title
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); // Progress Dialog Style Spinner
progressDialog.show(); // Display Progress Dialog
progressDialog.setCancelable(false);
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
}
progressDialog.dismiss();
}
}).start();

程序栏:

依赖性:

     implementation 'com.github.castorflex.smoothprogressbar:library:1.0.0'

XML:

     <fr.castorflex.android.smoothprogressbar.SmoothProgressBar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/myProcessbar"
android:layout_width="match_parent"
android:layout_height="10dp"
android:indeterminate="true" />

在 Res-> 颜色

      <color name="pocket_color_1">#ff1635</color>
<integer-array name="pocket_background_colors">
<item>@color/pocket_color_1</item>
</integer-array>


<color name="pocket_color_stop">#00ff00</color>
<integer-array name="pocket_background_stop">
<item>@color/pocket_color_stop</item>
</integer-array>

主要内容:

      public class MainActivity extends AppCompatActivity{
SmoothProgressBar smoothProgressBar;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
smoothProgressBar=findViewById(R.id.myProcessbar);
showProcessBar();
stopAnimation();    // call when required to stop process
}


public void showProcessBar(){
smoothProgressBar.setVisibility(View.VISIBLE);
smoothProgressBar.setIndeterminateDrawable(new SmoothProgressDrawable.Builder(getApplicationContext())
.interpolator(new AccelerateInterpolator())
.progressiveStart(true)
.progressiveStopSpeed(1000)
.build());
smoothProgressBar.setSmoothProgressDrawableBackgroundDrawable(
SmoothProgressBarUtils.generateDrawableWithColors(
getResources().getIntArray(R.array.pocket_background_colors),
((SmoothProgressDrawable)  smoothProgressBar.getIndeterminateDrawable()).getStrokeWidth()));
}


public void stopAnimation(){
smoothProgressBar.setSmoothProgressDrawableBackgroundDrawable(
SmoothProgressBarUtils.generateDrawableWithColors(
getResources().getIntArray(R.array.pocket_background_stop),
((SmoothProgressDrawable)  smoothProgressBar.getIndeterminateDrawable()).getStrokeWidth()));
smoothProgressBar.progressiveStop();
Handler handler=new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
smoothProgressBar.animate().alpha(0.0f).setDuration(6000).translationY(1000);
smoothProgressBar.setVisibility(View.GONE);
}
},1000);
}


}