私はそれの私の2番目のactivity.OnItemClick
にListView
を持っています私はウェブサービスと呼び、データを取得しようとしています。そしてその後、私はListView
が以前の活動の説明を持っているListView
アイテムを持っている3番目の活動に移っています。
このListView
を入力する前に、進行状況ダイアログを表示したいです。
ListView
でそれを行う方法がわかりませんか?誰かがそれを行う方法を知っていますか?
私のコード -
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>
activity
のロード中にプログレスバー(円)を表示する方法はいくつかあります。あなたの場合は、その中にListView
があります。
アクションバー
あなたが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を使って私のリストのデータを取得しています。つまり、AsyncTaskのonPreExecute()
では、次のようにしています。
// 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
の一つをロードしている間私のアプリでどのように見えるかです。
これはもっと簡単にできます。
出典: 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で定義した後は、ProgressBarクラスを介してJavaファイルでその参照を取得する必要があります。その構文は以下のとおりです。
private ProgressBar spinner;
spinner = (ProgressBar)findViewById(R.id.progressBar1);
その後、それを消して、必要に応じてsetVisibilityメソッドを使って元に戻すことができます。その構文は以下のとおりです。
spinner.setVisibility(View.GONE);
spinner.setVisibility(View.VISIBLE);
私はこれをリストビューのロードに使用しましたが役に立つかもしれません。
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>
そして私のMainActivityクラスは、
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秒間進行状況を表示し、それからリストビューを表示します。あなたはデータを静的にstringValuesリストに追加する代わりにあなたはdoInBackground()でサーバーからデータを得てそれを表示することができます。
サンプルを 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();
私のNexus 5 Android v4.0.3でそれをテストしました。がんばろう!
ListActivityを拡張していますか?
そうであれば、あなたのxmlに次の行を含む循環の進捗ダイアログを入れてください
<ProgressBar
Android:id="@Android:id/empty"
...other stuff...
/>
これで、リストビュー情報がすべて揃うまで進行状況インジケータが表示され、アダプタを設定できます。その時点で、それはリストビューに戻り、プログレスバーは消えます。
ProgressDialog dialog = ProgressDialog.show(Example.this, "", "Loading...", true);
Drawableに任意の名前(例えばprogressBar.xml)の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
}
[クリック]オプションまたは[ニーズ]の[この範囲内]ボタンを使用します。
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();
Listviewやrecyclerviewを使って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.htmlhttps://developer.Android.com/training/swipe/respond-refresh-request.html
ハッピーコーディング!
リストビューフッターにProgressBar
を追加することができます。
private ListView listview;
private ProgressBar progressBar;
...
progressBar = (ProgressBar) LayoutInflater.from(this).inflate(R.layout.progress_bar, null);
listview.addFooterView(progressBar);
layout/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);