Saya punya ListView
di kedua saya activity.OnItemClick
itu saya sebut layanan web dan mencoba untuk mengambil data. Dan setelah itu saya pindah ke aktivitas ketiga yang juga ListView
memiliki deskripsi ListView
item aktivitas sebelumnya .
Saya ingin menampilkan dialog progres sebelum mengisi ini ListView
.
Saya tidak mengerti bagaimana melakukannya ListView
? Adakah yang tahu cara melakukannya?
Kode saya-
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>
Jawaban:
Ada beberapa metode menampilkan progress bar (lingkaran) saat memuat
activity
. Dalam kasus Anda, satu denganListView
di dalamnya.DI ACTIONBAR
Jika Anda menggunakan
ActionBar
, Anda dapat memanggil yangProgressBar
seperti ini (ini bisa masuk ke AndaonCreate()
Dan setelah Anda selesai menampilkan daftar, untuk menyembunyikannya.
DALAM LAYOUT (XML)
Dan dalam aktivitas Anda (Jawa) saya menggunakan AsyncTask untuk mengambil data untuk daftar saya. SO, di AsyncTask
onPreExecute()
saya menggunakan sesuatu seperti ini:dan di
onPostExecute()
, setelah mengatur adaptor keListView
:EDIT: Ini adalah tampilannya di aplikasi saya saat memuat salah satu dari beberapa
ListViews
sumber
progress_medium_holo.xml
dan juga salin gambar yang relevan di masing-masing folder yang dapat digambar.@style/Spinner
?Anda dapat melakukan ini dengan lebih mudah.
Sumber: http://www.tutorialspoint.com/android/android_loading_spinner.htm
Ini membantu saya.
Tata letak:
sumber
Saya menggunakan ini untuk memuat tampilan daftar mungkin bermanfaat.
activity_main.xml
dan kelas MainActivity saya adalah,
aktivitas ini menampilkan kemajuan untuk 3sec kemudian akan menampilkan tampilan daftar, alih-alih menambahkan data secara statis ke daftar stringValues Anda bisa mendapatkan data dari server di doInBackground () dan menampilkannya.
sumber
Silakan gunakan sampel di tutorialspoint.com . Seluruh implementasi hanya membutuhkan beberapa baris kode tanpa mengubah file xml Anda. Semoga ini membantu.
LANGKAH 1: Impor perpustakaan
LANGKAH 2: Nyatakan variabel global ProgressDialog
LANGKAH 3: Mulai ProgressDialog baru dan gunakan properti berikut (perlu diketahui bahwa sampel ini hanya mencakup bilah pemuatan lingkaran dasar tanpa status kemajuan waktu nyata).
LANGKAH 4: Jika Anda menggunakan AsyncTasks, Anda dapat mulai menampilkan dialog dalam metode onPreExecute. Jika tidak, cukup tempatkan kode di awal tombol Anda pada acara Klik.
LANGKAH 5: Jika Anda menggunakan AsyncTasks, Anda dapat menutup dialog progres dengan menempatkan kode dalam metode onPostExecute. Jika tidak, cukup tempatkan kode sebelum menutup tombol Anda pada acara Klik.
Mengujinya dengan Nexus 5 android v4.0.3 saya. Semoga berhasil!
sumber
Apakah Anda memperluas ListActivity?
Jika demikian, masukkan dialog progres melingkar dengan baris berikut di xml Anda
Sekarang, indikator kemajuan akan muncul sampai Anda memiliki semua informasi tampilan daftar, dan mengatur Adaptor. Pada titik itu, ia akan kembali ke tampilan daftar, dan bilah kemajuan akan hilang.
sumber
fill_parent
. Kemudian sebagai anak kedua dari relatif_layout itu, minta indikator progres dipusatkan secara horizontal dan vertikal.sumber
Buat file xml nama apa saja (katakan progressBar.xml)
<color name="silverGrey">#C0C0C0</color>
di drawable dan tambahkan color.xml.Sekarang di file xml Anda di mana Anda memiliki listView Anda tambahkan kode ini:
Di AsyncTask dalam metode:
Dan di onPostExecute:
sumber
Anda dapat menambahkan
ProgressBar
footer ke listview:...
layout / progress_bar.xml
saat data dimuat ke panggilan tampilan adaptor:
sumber
Saya sarankan Anda ketika bekerja dengan listview atau recyclerview untuk menggunakan SwipeRefreshLayout . Seperti ini
Hanya bungkus tampilan Anda dan ini akan membuat animasi penyegaran saat memuat data atau dengan menggeser layar seperti yang dapat kita lakukan di banyak aplikasi.
Berikut dokumentasi cara menggunakannya:
https://developer.android.com/training/swipe/add-swipe-interface.html https://developer.android.com/training/swipe/respond-refresh-request. html
Selamat coding!
sumber
Gunakan tombol Dalam Ini pada opsi Klik atau kebutuhan Anda:
sumber
Bilah proses:
Ketergantungan:
XML:
Dalam warna Res->
Di Utama:
sumber
Saya menggunakan ini:
sumber