it-swarm.com.de

so zeigen Sie den Fortschrittsbalken (Kreis) in einer Aktivität mit Listenansicht an, bevor Sie die Listenansicht mit Daten laden

Ich habe eine ListView in meinem zweiten activity.OnItemClick davon rief ich einen Webservice an und versuchte, Daten abzurufen. Danach gehe ich zur dritten Aktivität über, die auch eine ListView mit Beschreibung der vorherigen Aktivitäten ListView hat.

Ich möchte einen Fortschrittsdialog anzeigen, bevor Sie diese ListView ausfüllen.

Ich verstehe nicht, wie es mit ListView geht? Weiß jemand, wie es geht?

Mein 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>
136
Ani

Es gibt verschiedene Methoden, um einen Fortschrittsbalken (Kreis) anzuzeigen, während eine activity geladen wird. In Ihrem Fall eine mit einer ListView darin.

IN ACTIONBAR

Wenn Sie eine ActionBar verwenden, können Sie die ProgressBar so aufrufen (dies könnte in Ihre onCreate() gehen

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

Nachdem Sie die Liste angezeigt haben, können Sie sie ausblenden.

setProgressBarIndeterminateVisibility(false);

IM LAYOUT (das 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>

Und in Ihrer Aktivität (Java) .__ benutze ich eine AsyncTask, um Daten für meine Listen abzurufen. SO, in der AsyncTask onPreExecute() verwende ich so etwas:

// 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);
}

und in der onPostExecute(), nachdem der Adapter auf die ListView eingestellt wurde:

@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);
}

BEARBEITEN: So sieht es in meiner App aus, wenn Sie eine von mehreren ListViews-Dateien laden.

enter image description here

170
Siddharth Lele

Sie können das einfacher machen.
Quelle: http://www.tutorialspoint.com/Android/android_loading_spinner.htm
Es hat mir geholfen.

Layout:

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

Nach der Definition in xml müssen Sie die Referenz in der Java-Datei .__ abrufen. durch die ProgressBar-Klasse. Ihre Syntax ist unten angegeben:

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

Danach können Sie es verschwinden lassen und bei Bedarf wieder zurückbringen durch die setVisibility-Methode. Ihre Syntax ist unten angegeben:

spinner.setVisibility(View.GONE);
spinner.setVisibility(View.VISIBLE);
28
Sergey Kuchin

Ich habe dieses hier für das Laden der Listenansicht verwendet.

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>

und meine MainActivity-Klasse ist

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;
    }
}
}

wenn diese Aktivität 3 Sekunden lang angezeigt wird, wird die Listenansicht angezeigt. Anstatt statisch Daten zur Liste stringValues ​​hinzuzufügen, können Sie Daten vom Server in doInBackground () abrufen und anzeigen.

19

Bitte verwenden Sie das Beispiel unter tutorialspoint.com . Die gesamte Implementierung benötigt nur wenige Codezeilen, ohne die XML-Datei zu ändern. Hoffe das hilft.

SCHRITT 1: Bibliothek importieren

import Android.app.ProgressDialog;

SCHRITT 2: Deklarieren Sie die globale Variable ProgressDialog

ProgressDialog loading = null;

SCHRITT 3: Starten Sie den neuen ProgressDialog und verwenden Sie die folgenden Eigenschaften (bitte beachten Sie, dass dieses Beispiel nur den grundlegenden Kreisladebalken ohne Echtzeitstatusstatus abdeckt).

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

SCHRITT 4: Wenn Sie AsyncTasks verwenden, können Sie den Dialog in der onPreExecute-Methode anzeigen. Andernfalls platzieren Sie den Code einfach am Anfang Ihres button onClick-Ereignisses.

loading.show();

SCHRITT 5: Wenn Sie AsyncTasks verwenden, können Sie das Fortschrittsdialogfeld schließen, indem Sie den Code in die onPostExecute-Methode einfügen. Andernfalls platzieren Sie einfach den Code, bevor Sie das button onClick-Ereignis schließen.

loading.dismiss();

Getestet mit meinem Nexus 5 Android v4.0.3. Viel Glück!

9

Erweitern Sie ListActivity?

Wenn ja, setzen Sie einen kreisförmigen Fortschrittsdialog mit der folgenden Zeile in Ihre XML-Datei

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

Nun wird die Fortschrittsanzeige angezeigt, bis Sie alle Informationen zur Listenansicht haben und den Adapter einstellen. An diesem Punkt wird zur Listenansicht zurückgekehrt und die Fortschrittsleiste wird ausgeblendet.

8
The Holo Dev
ProgressDialog dialog = ProgressDialog.show(Example.this, "", "Loading...", true);
3
Neel Kadia

Erstellen Sie eine XML-Datei mit einem beliebigen Namen (z. B. progressBar.xml) in drawable und fügen Sie <color name="silverGrey">#C0C0C0</color> in color.xml hinzu.

<?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>

Fügen Sie nun in Ihrer XML-Datei, in der sich Ihre listView befindet, folgenden Code hinzu:

 <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"/>

In AsyncTask in der Methode:

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

    // your code
}

Und in onPostExecute:

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

    //your code
}
1
Vaibhav Joshi

Klicken Sie auf diese Option innerhalb der Schaltfläche oder auf Ihre Bedürfnisse:

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();
0
Mr Saykat

Ich empfehle Ihnen bei der Arbeit mit Listview oder Recyclerview die Verwendung von SwipeRefreshLayout. So was 

    <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>

Packen Sie nur Ihre Ansicht ein. Dadurch wird eine Animation zum Aktualisieren erzeugt, wenn Daten geladen werden oder der Bildschirm heruntergefahren wird, wie dies in vielen Apps möglich ist.
Hier ist die Dokumentation, wie man es benutzt:
https://developer.Android.com/training/swipe/add-swipe-interface.htmlhttps://developer.Android.com/training/swipe/respond-refresh -request.html

Viel Spaß beim Codieren!

0
Gian Gomen

Sie können die ProgressBar zur Fußzeile der Listenansicht hinzufügen:

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"
     />

wenn die Daten in den Aufruf der Adapteransicht geladen werden:

        listview.removeFooterView(progressBar);
0