Tengo un ListView
segundo activity.OnItemClick
en el que llamé un servicio web y traté de obtener datos. Y después de eso me estoy moviendo a la tercera actividad que también tiene una ListView
descripción del ListView
elemento de actividades anteriores .
Quiero mostrar un cuadro de diálogo de progreso antes de completar esto ListView
.
No entiendo cómo hacerlo ListView
? ¿Alguien sabe cómo hacerlo?
Mi código-
ThirdActivity.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);
}
}
thirdactivity.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>
Respuestas:
Existen varios métodos para mostrar una barra de progreso (círculo) mientras se carga un archivo
activity
. En su caso, uno con unListView
adentro.EN BARRA DE ACCIÓN
Si está utilizando un
ActionBar
, puede llamarProgressBar
así (esto podría ir en suonCreate()
Y una vez que haya terminado de mostrar la lista, para ocultarla.
EN EL DISEÑO (El XML)
Y en su actividad (Java), uso una AsyncTask para buscar datos para mis listas. Entonces, en AsyncTask
onPreExecute()
utilizo algo como esto:y en el
onPostExecute()
, después de configurar el adaptador aListView
:EDITAR: así es como se ve en mi aplicación al cargar uno de varios
ListViews
fuente
progress_medium_holo.xml
y también copie las imágenes relevantes en sus respectivas carpetas dibujables.@style/Spinner
?Puedes hacer esto más fácil.
Fuente: http://www.tutorialspoint.com/android/android_loading_spinner.htm
Me ayudó.
Diseño:
fuente
Utilicé este para cargar la vista de lista puede ser útil.
activity_main.xml
y mi clase MainActivity es,
esta actividad muestra el progreso durante 3 segundos, luego mostrará la vista de lista, en lugar de agregar datos estáticamente a la lista stringValues, puede obtener datos del servidor en doInBackground () y mostrarlos.
fuente
Utilice la muestra en tutorialspoint.com . Toda la implementación solo necesita unas pocas líneas de código sin cambiar su archivo xml. Espero que esto ayude.
PASO 1: Importar biblioteca
PASO 2: Declare la variable global ProgressDialog
PASO 3: Inicie el nuevo ProgressDialog y use las siguientes propiedades (tenga en cuenta que esta muestra solo cubre la barra de carga básica del círculo sin el estado de progreso en tiempo real).
PASO 4: Si está utilizando AsyncTasks, puede comenzar a mostrar el cuadro de diálogo en el método onPreExecute. De lo contrario, simplemente coloque el código al comienzo de su botón en el evento Click.
PASO 5: Si está utilizando AsyncTasks, puede cerrar el diálogo de progreso colocando el código en el método onPostExecute. De lo contrario, simplemente coloque el código antes de cerrar su botón en el evento Click.
Probado con mi Nexus 5 android v4.0.3. ¡Buena suerte!
fuente
¿Estás extendiendo ListActivity?
Si es así, coloque un diálogo de progreso circular con la siguiente línea en su xml
Ahora, el indicador de progreso se mostrará hasta que tenga toda la información de vista de lista y configure el Adaptador. En ese momento, volverá a la vista de lista y la barra de progreso desaparecerá.
fuente
fill_parent
. Luego, como segundo hijo de ese relativo_layout, haga que el indicador de progreso se centre tanto horizontal como verticalmente.fuente
Cree un archivo xml con cualquier nombre (por ejemplo, progressBar.xml) en drawable y agregue
<color name="silverGrey">#C0C0C0</color>
color.xml.Ahora en su archivo xml donde tiene su listView agregue este código:
En AsyncTask en el método:
Y en onPostExecute:
fuente
Puede agregar el
ProgressBar
pie de lista a viewview:...
layout / progress_bar.xml
cuando los datos se cargan en la vista de vista de adaptador:
fuente
Le sugiero que cuando trabaje con listview o recyclerview use SwipeRefreshLayout . Me gusta esto
Solo ajuste su vista y esto creará una animación de actualización al cargar datos o deslizando hacia abajo la pantalla como podemos hacer en muchas aplicaciones.
Aquí está la documentación de cómo usarlo:
https://developer.android.com/training/swipe/add-swipe-interface.html https://developer.android.com/training/swipe/respond-refresh-request. html
¡Feliz codificación!
fuente
Use este botón interno en la opción Click o sus necesidades:
fuente
Barra de proceso:
Dependencia:
XML:
En Res-> color
En principal:
fuente
Estoy usando esto:
fuente