cách hiển thị thanh tiến trình (khoanh tròn) trong một hoạt động có listview trước khi tải listview với dữ liệu


141

Tôi có một ListViewthứ hai activity.OnItemClicktrong số đó, tôi đã gọi một dịch vụ web và cố gắng tìm nạp dữ liệu. Và sau đó tôi chuyển sang hoạt động thứ ba cũng ListViewcó mô tả về ListViewmục hoạt động trước đó .

Tôi muốn hiển thị một hộp thoại tiến trình trước khi điền vào đây ListView.

Tôi không hiểu làm thế nào để làm điều đó ListView? Có ai biết làm thế nào để làm điều đó?

Mã của tôi-

Thứ baActivity.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>

Bạn đã tìm kiếm về truy vấn này trên internet? stackoverflow.com/questions/7061281/
Mạnh

4
Pankaj- Tôi biết cách hiển thị Progressdialog, nhưng tôi muốn chỉ hiển thị vòng tròn Tiến trình thay vì hộp thoại tiến trình.
Ani

Câu trả lời:


175

Có một số phương pháp hiển thị thanh tiến trình (vòng tròn) trong khi tải một activity. Trong trường hợp của bạn, một với một ListViewtrong đó.

TRONG HÀNH ĐỘNG

Nếu bạn đang sử dụng ActionBar, bạn có thể gọi ProgressBarnhư thế này (điều này có thể đi vàoonCreate()

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

Và sau khi bạn hoàn thành việc hiển thị danh sách, để ẩn nó.

setProgressBarIndeterminateVisibility(false);

TRONG CUỘC ĐỜI (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>

Và trong hoạt động của bạn (Java), tôi sử dụng AsyncTask để tìm nạp dữ liệu cho danh sách của mình. VÌ VẬY, trong AsyncTask, onPreExecute()tôi sử dụng một cái gì đó như thế này:

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

và trong onPostExecute(), sau khi cài đặt bộ điều hợp thành 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);
}

EDIT: Đây là giao diện trong ứng dụng của tôi trong khi tải một trong nhiều ListViews

nhập mô tả hình ảnh ở đây


1
Tôi không có Actionbar trong ứng dụng của mình. Tôi muốn hiển thị vòng tròn proressbar ở giữa màn hình.
Ani

@Ani: Nó đã có sẵn trong câu trả lời. Sử dụng ví dụ mã để sử dụng trong bố trí. Nó cũng có mã cho XML của bạn.
Siddharth Lele

1
@ShajeelAfzal: Vâng. Đó là một phong cách. Bạn sẽ tìm thấy SDK từ bất kỳ API ICS nào. Tìm kiếm XML này: progress_medium_holo.xmlvà cũng sao chép các hình ảnh có liên quan trong các thư mục có thể vẽ tương ứng của chúng.
Siddharth Lele

1
@eddy chỉ cần sử dụng style = "? android: attr / ProgressBarStyleLarge" trong nút ProgressBar
Paul Gregoire

4
Bạn có thể vui lòng cho chúng tôi biết định nghĩa của nó là @style/Spinnergì không?
Pankaj

36

Bạn có thể làm điều này dễ dàng hơn.
Nguồn: http://www.tutorialspoint.com/android/android_loading_spinner.htmlm
Nó đã giúp tôi.

Bố trí:

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

Sau khi xác định nó trong xml, bạn phải lấy tham chiếu của nó trong tệp java thông qua lớp ProgressBar. Cú pháp của nó được đưa ra dưới đây:

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

Sau đó, bạn có thể làm cho nó biến mất và đưa nó trở lại khi cần thông qua phương thức setVisibility. Cú pháp của nó được đưa ra dưới đây:

spinner.setVisibility(View.GONE);
spinner.setVisibility(View.VISIBLE);

Mặc dù đây không phải là câu trả lời tốt nhất cho câu hỏi, nhưng nó đã giúp tôi giải quyết vấn đề của mình. Cảm ơn bạn.
Machado

19

Tôi đã sử dụng cái này để tải danh sách có thể hữu ích.

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>

và lớp MainActivity của tôi là,

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

Hoạt động này hiển thị tiến trình trong 3 giây sau đó nó sẽ hiển thị listview, thay vì thêm dữ liệu tĩnh vào danh sách stringValues, bạn có thể lấy dữ liệu từ máy chủ trong doInBackground () và hiển thị nó.


3
Chỉ vì mục đích hoàn chỉnh: Các tài liệu Android hiện đang tuyên bố rằng không nên sử dụng văn bản bên dưới thanh tiến trình. developer.android.com/design/building-blocks/
Mạnh

9

Vui lòng sử dụng mẫu tại guidespoint.com . Toàn bộ việc thực hiện chỉ cần một vài dòng mã mà không thay đổi tệp xml của bạn. Hi vọng điêu nay co ich.

BƯỚC 1: Nhập thư viện

import android.app.ProgressDialog;

BƯỚC 2: Khai báo biến toàn cục ProgressDialog

ProgressDialog loading = null;

BƯỚC 3: Bắt đầu ProgressDialog mới và sử dụng các thuộc tính sau (xin lưu ý rằng mẫu này chỉ bao gồm thanh tải vòng tròn cơ bản mà không có trạng thái tiến trình thời gian thực).

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

BƯỚC 4: Nếu bạn đang sử dụng AsyncT task, bạn có thể bắt đầu hiển thị hộp thoại trong phương thức onPreExecute. Nếu không, chỉ cần đặt mã vào đầu nút của bạn trên sự kiện.

loading.show();

BƯỚC 5: Nếu bạn đang sử dụng AsyncT task, bạn có thể đóng hộp thoại tiến trình bằng cách đặt mã trong phương thức onPostExecute. Nếu không, chỉ cần đặt mã trước khi đóng nút của bạn trên sự kiện Click.

loading.dismiss();

Đã thử nghiệm nó với Nexus 5 android v4.0.3 của tôi. Chúc may mắn!


4
ProgressDialog đã không được chấp nhận kể từ API cấp O developer.android.com/reference/android/app/ProTHERDialog.html
Varvara Kalinina

8

Bạn đang mở rộng ListActivity?

Nếu vậy, hãy đặt hộp thoại tiến trình tròn với dòng sau trong xml của bạn

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

Bây giờ, chỉ báo tiến trình sẽ hiển thị cho đến khi bạn có tất cả thông tin về danh sách của mình và đặt Bộ điều hợp. Tại thời điểm đó, nó sẽ quay trở lại listview và thanh tiến trình sẽ biến mất.


Tôi muốn hiển thị vòng tròn proressbar ở giữa màn hình. Nếu tôi thêm thanh Tiến trình, nơi tôi có thể đặt listview trong XML.
Ani

Tạo bố cục như bình thường. Tôi đã làm điều này chính xác trên một trong những ứng dụng của tôi. Nếu tôi nhớ lại, bạn có thể đặt listview bên trong bố cục tương đối toàn màn hình với chiều cao và chiều rộng fill_parent. Sau đó, như là một đứa con thứ hai cho tương đối đó, có chỉ báo tiến trình tập trung cả theo chiều ngang và chiều dọc.
Holo Dev

bạn có thể có xml cho việc này
Ani

1
Nhưng nếu kết quả của tải là trống rỗng thì sao?
Dkneller

3
ProgressDialog dialog = ProgressDialog.show(Example.this, "", "Loading...", true);

Đây là một cách rất đơn giản để đạt được mục tiêu. như KISS Giữ nó đơn giản theo cách ngu ngốc: D
Josiel Faleiros

2
Điều này không được chấp nhận trong API 26.
Nithin

1

Tạo một tệp xml bất kỳ tên nào (giả sử ProgressBar.xml) trong drawable và thêm <color name="silverGrey">#C0C0C0</color>vào color.xml.

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

Bây giờ trong tệp xml của bạn, nơi bạn có listView của bạn thêm mã này:

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

Trong AsyncTask trong phương thức:

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

    // your code
}

Và trong onPostExecute:

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

    //your code
}

0

Bạn có thể thêm ProgressBarchân trang listview:

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

khi dữ liệu được tải vào lệnh gọi bộ điều hợp:

        listview.removeFooterView(progressBar);

0

Tôi đề nghị bạn khi làm việc với listview hoặc recyclerview để sử dụng SwipeRefreshLayout . Như thế này

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

Chỉ bao bọc chế độ xem của bạn và điều này sẽ tạo ra một hình ảnh động làm mới khi tải dữ liệu hoặc bằng cách vuốt xuống màn hình như chúng ta có thể làm trong nhiều ứng dụng.
Đây là tài liệu về cách sử dụng nó:
https://developer.android.com/training/swipe/add-swipe-interface.html https://developer.android.com/training/swipe/respond-refresh-request. html

Chúc mừng mã hóa!


0

Sử dụng nút This Inside trên tùy chọn Click hoặc nhu cầu của bạn:

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();

-1

Thanh quá trình:

Phụ thuộc:

     implementation 'com.github.castorflex.smoothprogressbar:library:1.0.0'

XML:

     <fr.castorflex.android.smoothprogressbar.SmoothProgressBar
        xmlns:android="http://schemas.android.com/apk/res/android"                
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/myProcessbar"
        android:layout_width="match_parent"
        android:layout_height="10dp"
        android:indeterminate="true" />

Trong Res-> màu

      <color name="pocket_color_1">#ff1635</color>
      <integer-array name="pocket_background_colors">
          <item>@color/pocket_color_1</item>
      </integer-array>

      <color name="pocket_color_stop">#00ff00</color>
      <integer-array name="pocket_background_stop">
          <item>@color/pocket_color_stop</item>
      </integer-array>

Trong chính:

      public class MainActivity extends AppCompatActivity{
        SmoothProgressBar smoothProgressBar;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          smoothProgressBar=findViewById(R.id.myProcessbar);
          showProcessBar();
          stopAnimation();    // call when required to stop process
        }

        public void showProcessBar(){
          smoothProgressBar.setVisibility(View.VISIBLE);
          smoothProgressBar.setIndeterminateDrawable(new SmoothProgressDrawable.Builder(getApplicationContext())
            .interpolator(new AccelerateInterpolator())
            .progressiveStart(true)
            .progressiveStopSpeed(1000)
            .build());
          smoothProgressBar.setSmoothProgressDrawableBackgroundDrawable(
          SmoothProgressBarUtils.generateDrawableWithColors(
                    getResources().getIntArray(R.array.pocket_background_colors),
                    ((SmoothProgressDrawable)  smoothProgressBar.getIndeterminateDrawable()).getStrokeWidth()));
        }

        public void stopAnimation(){
          smoothProgressBar.setSmoothProgressDrawableBackgroundDrawable(
          SmoothProgressBarUtils.generateDrawableWithColors(
                    getResources().getIntArray(R.array.pocket_background_stop),
                    ((SmoothProgressDrawable)  smoothProgressBar.getIndeterminateDrawable()).getStrokeWidth()));
          smoothProgressBar.progressiveStop();
          Handler handler=new Handler();
          handler.postDelayed(new Runnable() {
            @Override
            public void run() {
               smoothProgressBar.animate().alpha(0.0f).setDuration(6000).translationY(1000);
               smoothProgressBar.setVisibility(View.GONE);
            }
          },1000);
}

      }

-2

Tôi đang sử dụng cái này:

loading = ProgressDialog.show(example.this,"",null, true, true);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.