J'en ai un ListView
dans ma seconde activity.OnItemClick
, j'ai appelé un service Web et j'ai essayé de récupérer des données. Et après cela, je passe à la troisième activité qui contient également une ListView
description des activités précédentes ListView
.
Je souhaite afficher une boîte de dialogue de progression avant de la remplir ListView
.
Je ne comprends pas comment le faire ListView
? Est-ce que quelqu'un sait comment le faire?
Mon code-
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>
Réponses:
Il existe plusieurs méthodes pour afficher une barre de progression (cercle) lors du chargement d'un fichier
activity
. Dans votre cas, un avec unListView
dedans.EN ACTIONBAR
Si vous utilisez un
ActionBar
, vous pouvez appeler leProgressBar
comme ceci (cela pourrait aller dans votreonCreate()
Et une fois que vous avez terminé d'afficher la liste, pour la masquer.
DANS LA DISPOSITION (Le XML)
Et dans votre activité (Java), j'utilise une AsyncTask pour récupérer des données pour mes listes. SO, dans l'AsyncTask,
onPreExecute()
j'utilise quelque chose comme ceci:et dans le
onPostExecute()
, après avoir réglé l'adaptateur surListView
:EDIT: voici à quoi cela ressemble dans mon application lors du chargement de l'un des plusieurs
ListViews
la source
progress_medium_holo.xml
et copiez également les images pertinentes dans leurs dossiers dessinables respectifs.@style/Spinner
?Vous pouvez le faire plus facilement.
Source: http://www.tutorialspoint.com/android/android_loading_spinner.htm
Cela m'a aidé.
Disposition:
la source
J'ai utilisé celui-ci pour le chargement de la vue de liste peut être utile.
activity_main.xml
et ma classe MainActivity est,
cette activité affiche la progression pendant 3 secondes, puis elle affichera une vue de liste, au lieu d'ajouter des données statiquement à la liste stringValues, vous pouvez obtenir des données du serveur dans doInBackground () et l'afficher.
la source
Veuillez utiliser l'exemple sur tutorialspoint.com . L'ensemble de l'implémentation n'a besoin que de quelques lignes de code sans changer votre fichier xml. J'espère que cela t'aides.
ÉTAPE 1: Importer la bibliothèque
ÉTAPE 2: Déclarer la variable globale ProgressDialog
ÉTAPE 3: Démarrez un nouveau ProgressDialog et utilisez les propriétés suivantes (veuillez noter que cet exemple ne couvre que la barre de chargement de cercle de base sans l'état de progression en temps réel).
ÉTAPE 4: Si vous utilisez AsyncTasks, vous pouvez commencer à afficher la boîte de dialogue dans la méthode onPreExecute. Sinon, placez simplement le code au début de votre événement bouton onClick.
ÉTAPE 5: Si vous utilisez AsyncTasks, vous pouvez fermer la boîte de dialogue de progression en plaçant le code dans la méthode onPostExecute. Sinon, placez simplement le code avant de fermer votre bouton onClick.
Je l'ai testé avec mon Nexus 5 android v4.0.3. Bonne chance!
la source
Étendez-vous ListActivity?
Si tel est le cas, mettez une boîte de dialogue de progression circulaire avec la ligne suivante dans votre xml
Maintenant, l'indicateur de progression apparaîtra jusqu'à ce que vous ayez toutes vos informations d'affichage de liste et que vous définissiez l'adaptateur. À ce stade, il reviendra à la vue de liste et la barre de progression disparaîtra.
la source
fill_parent
. Ensuite, en tant que deuxième enfant de cette relative_layout, ayez l'indicateur de progression centré à la fois horizontalement et verticalement.la source
Créez un fichier xml de n'importe quel nom (disons progressBar.xml) dans drawable et ajoutez
<color name="silverGrey">#C0C0C0</color>
color.xml.Maintenant, dans votre fichier xml où vous avez votre listView, ajoutez ce code:
Dans AsyncTask dans la méthode:
Et dans onPostExecute:
la source
Vous pouvez ajouter le
ProgressBar
pied de page à la vue de liste:...
layout / progress_bar.xml
lorsque les données sont chargées dans l'appel de vue de l'adaptateur:
la source
Je vous suggère lorsque vous travaillez avec listview ou recyclerview d'utiliser SwipeRefreshLayout . Comme ça
N'enveloppez que votre vue et cela créera une animation d'actualisation lors du chargement de données ou en faisant glisser l'écran vers le bas comme nous pouvons le faire dans de nombreuses applications.
Voici la documentation sur son utilisation:
https://developer.android.com/training/swipe/add-swipe-interface.html https://developer.android.com/training/swipe/respond-refresh-request. html
Bon codage!
la source
Utilisez ce bouton dans l'option Click ou vos besoins:
la source
Barre de processus:
Dépendance:
XML:
En Res-> couleur
Dans Main:
la source
J'utilise ceci:
la source