Tôi đang cố gắng tạo Hoạt động sẽ đóng vai trò là Chế độ xem theo ngày của Lịch. Khi người dùng vuốt sang trái hoặc sang phải, họ sẽ chuyển sang ngày mai hoặc ngày hôm qua, v.v. qua lịch.Hoạt động bằng cách sử dụng ViewPager, PagerAdapter và AsyncTask khiến chế độ xem trống
Tôi quyết định sử dụng ViewPager/PagerAdapter để xử lý chế độ xem và kiểm soát phân trang qua ngày.
Là một phần của việc thiết lập Chế độ xem theo ngày, ứng dụng sẽ chuyển đến API của tôi và yêu cầu bất kỳ cuộc hẹn nào cho ngày đó. Các cuộc hẹn sẽ được trả lại và hiển thị cho ngày đó. Để lấy dữ liệu từ API, tôi đang sử dụng AsyncTask. Về cơ bản, instantiateItem()
gọi API và thiết lập listView trống. Sau đó, BroadcastReceiver
sẽ nhận phản hồi, phân tích dữ liệu và hiển thị dữ liệu đó.
Sự cố tôi gặp phải là chế độ xem đầu tiên được hiển thị luôn trống. Các chế độ xem ở bên trái hoặc bên phải, được điền và nếu tôi đi hai vị trí theo một trong hai hướng, đủ để chế độ xem ban đầu bị hủy, sau đó quay lại chế độ xem ban đầu, nó có dữ liệu. Tại sao? Làm thế nào để làm cho có được cái nhìn đầu tiên được dân cư mà không cần phải di chuyển trên 2 swipes?
Đây là hoạt động của tôi. Hiện tại tôi không phân tích dữ liệu từ API, chỉ mô phỏng bằng danh sách các chuỗi trong thời gian có nghĩa.
public class MyPagerActivity extends Activity {
private ViewPager myPager;
private static int viewCount = 1000;
private Context ctx;
private MyPagerAdapter myAdapter;
private static final String tag = "MyPagerActivity";
private static final String apiAction = "getAppointmentsForDate";
private static final String apiUri = "https://myAPI.com/api.php";
private static final String resource = "appointments";
private static final String action = "getappointmentsfordate";
private static final String date = "20120124";
private ProgressDialog progress;
private SharedPreferences loginPreferences;
private SharedPreferences.Editor loginPreferencesEditor;
private ListView v;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ctx = this;
myAdapter = new MyPagerAdapter();
myPager = (ViewPager) findViewById(R.id.myPager);
myPager.setAdapter(myAdapter);
myPager.setCurrentItem(500);
}
private class MyPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return viewCount;
}
@Override
public Object instantiateItem(View collection, int position) {
try {
Log.d(tag, "trying http connection");
loginPreferences = getSharedPreferences("loginPrefs", MODE_PRIVATE);
loginPreferencesEditor = loginPreferences.edit();
String authToken = loginPreferences.getString("authToken", "");
String staffOrRoomsId = loginPreferences.getString("staffOrRoomsId", "");
String staffOrRoomsIdName = loginPreferences.getString("staffOrRoomsIdName", "");
HttpPost apiRequest = new HttpPost(new URI(apiUri));
List<NameValuePair> parameters = new ArrayList<NameValuePair>();
parameters.add(new BasicNameValuePair("authToken", authToken));
parameters.add(new BasicNameValuePair("resource", resource));
parameters.add(new BasicNameValuePair("action", action));
parameters.add(new BasicNameValuePair("date", date));
parameters.add(new BasicNameValuePair(staffOrRoomsIdName, staffOrRoomsId));
apiRequest.setEntity(new UrlEncodedFormEntity(parameters));
RestTask task = new RestTask(ctx, apiAction);
task.execute(apiRequest);
//Display progress to the user
// progress = ProgressDialog.show(ctx, "Searching", "Waiting For Results...", true);
} catch (Exception e) {
e.printStackTrace();
}
Log.d(tag, "Creating another view! Position: " + position);
myPager.setTag(collection);
v = new ListView(ctx);
((ViewPager) collection).addView(v, 0);
return v;
}
@Override
public void destroyItem(View collection, int position, Object view) {
Log.d(tag, "Destroying position: " + position + "!");
((ViewPager) collection).removeView((ListView) view);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==((ListView)object);
}
@Override
public void finishUpdate(View arg0) {}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void startUpdate(View arg0) {}
}
@Override
public void onResume() {
super.onResume();
registerReceiver(receiver, new IntentFilter(apiAction));
}
@Override
public void onPause() {
super.onPause();
unregisterReceiver(receiver);
}
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//Clear progress indicator
if (progress != null) {
progress.dismiss();
}
Log.d(tag, "Broadcast received");
String[] from = new String[] { "str" };
int[] to = new int[] { android.R.id.text1 };
List<Map<String, String>> items = new ArrayList<Map<String, String>>();
for (int i = 0; i < 20; i++)
{
Map<String, String> map = new HashMap<String, String>();
map.put("str", String.format("Item %d", i + 1));
items.add(map);
}
SimpleAdapter adapter = new SimpleAdapter(ctx, items, android.R.layout.simple_list_item_1, from, to);
v.setAdapter(adapter);
}
};
}
Cảm ơn bạn đã dành thời gian để xem lại câu hỏi này!
chúng tôi đang gặp sự cố tương tự khi kết quả cũ vẫn được hiển thị cho đến khi vuốt sang trước hoặc lùi lại từ 1 đến 3 địa điểm. chúng tôi đang sử dụng kết hợp pageradapter/viewpager. là giải pháp sử dụng phân đoạn cho mỗi trang? –