cuốn sách gpt4 ai đã làm

Làm mới chương trình ListView Xamarin Forms không dừng trên Android khi tải trang

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 18:55:45 hai mươi bốn 4
mua khóa gpt4 Nike

Tôi có một dự án trong Visual Studio 2015 với ListView Dự án di động, có chức năng sau làm mới dữ liệu Đã điền một số dữ liệu thông qua lệnh gọi API:

async Nhiệm vụ làm mớiData()
{
myListView.BeginRefresh();
var apiCallResult = đang chờ App.Api.myApiGetCall();
myListView.ItemsSource = apiCallResult;
myListView.EndRefresh();
}

làm mớiData() gọi điện

ghi đè được bảo vệ void OnAppearing()
{
base.OnAppearing();
làm mớiData();
}

Mọi thứ đều hoạt động tốt ngoại trừ trên Android, chỉ báo làm mới không hiển thị khi trang được tải lần đầu. Kết thúc Làm mới() dừng lại hoặc biến mất. Trang này nằm ở Trang theo thẻ , để tôi có thể chuyển đến một tab khác rồi quay lại trang, đồng thời chỉ báo làm mới bắt đầu và dừng bình thường khi lệnh gọi API của tôi hoàn tất.

Tại sao quá trình làm mới không dừng khi trang được tải lần đầu trên Android? Bất kỳ trợ giúp sẽ được đánh giá rất cao.

Lưu ý: Tính năng này hoạt động tốt khi tôi chạy trên iOS.

Những gì tôi đã thử cho đến nay:

  1. Sẽ myListView.BeginRefresh() Thay thế bằng myListView.IsRefreshing = true và sẽ myListView.EndRefresh() Thay thế bằng myListView.IsRefreshing = false

  2. sử dụng Device.BeginInvokeOnMainThread(() => //cập nhật danh sách và endRefresh}).

  3. sử dụng async void làm mớiData() thay vì async Nhiệm vụ làm mớiData().

câu trả lời hay nhất

Cá nhân tôi, khi tôi Trình xây dựng trang Tôi gặp phải sự cố này khi bắt đầu làm mới ListView và dừng nó sau khi tải dữ liệu. Đôi khi (thường xuyên)Xamarin.Forms ListView Hoạt ảnh làm mới sẽ không bị hủy.

Tôi tin rằng bạn đang sử dụng Android VuốtLàm mớiBố cục Một vấn đề khá phổ biến gặp phải khi setRefreshing(sai) Dừng hoạt ảnh làm mới sau khi gọi nó. Các nhà phát triển Android gốc sử dụng các phương pháp sau:

SwipeRefreshLayout.post(new Runnable() {
@Ghi đè
công khai void run() {
mSwipeRefreshLayout.setRefreshing(làm mới);
}
});

Điều thú vị là Xamarin.Forms đặt trạng thái làm mới ban đầu (mã số); tuy nhiên, điều đó là không đủ. Bạn cần một trình kết xuất tùy chỉnh:

lớp công khai ExtendedListViewRenderer: ListViewRenderer
{
///
/// Bố cục làm mới bao bọc ListView gốc.
///

riêng tư SwipeRefreshLayout _refreshLayout;

public ExtendedListViewRenderer(Android.Content.Context context): base(context)
{
}

ghi đè được bảo vệ void Vứt bỏ (xử lý bool)
{
nếu (xử lý)
{
_refreshLayout = null;
}
base.Dispose(xử lý);
}

ghi đè được bảo vệ void OnElementChanged(ElementChangedEventArgs e)
{
base.OnElementChanged(e);
_refreshLayout = (SwipeRefreshLayout)Control.Parent;
}

ghi đè được bảo vệ void OnElementPropertyChanged(người gửi đối tượng, PropertyChangedEventArgs e)
{
if (e.PropertyName == ListView.IsRefreshingProperty.PropertyName)
{
// Đừng gọi phương thức cơ sở: chúng tôi đang xử lý nó một cách thủ công
UpdateIsRefreshing();
return;
}
base.OnElementPropertyChanged(người gửi, e);
}

///
/// Cập nhật trạng thái hoạt ảnh SwipeRefreshLayout tùy thuộc vào phần tử IsRefreshing
/// tài sản.
///

khoảng trống được bảo vệ UpdateIsRefreshing()
{
// Tôi e rằng phương thức này có thể được gọi sau khi ListViewRenderer bị loại bỏ
// Vì vậy, hãy tạo một tham chiếu mới cho phiên bản SwipeRefreshLayout
SwipeRefreshLayout làm mớiLayoutInstance = _refreshLayout;

nếu (refreshLayoutInstance == null)
{
return;
}

bool isRefreshing = Element.IsRefreshing;
làm mớiLayoutInstance.Post(() =>
{
RefreshLayoutInstance.Refreshing = isRefreshing;
});
}
}

Về C# - Làm mới chương trình ListView của Xamarin Forms không dừng trên Android khi tải trang, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/42165245/

hai mươi bốn 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress