我正在使用android ViewPager。Android Empty ViewPager更新,其余API响应
我在开始时将viewpager设置为空列表,因为我只想显示将从REST API响应中获取的动态数据。
所以,同时给出一个空的适配器列表。一开始会有0页。所以除此之外,我正在运行AsynTask,它将从服务器获取JSON格式的数据。
我想设置空的视图寻呼机计数与数组大小的json响应。 因此总页数= json数组的大小
但是当我尝试更新适配器时。它什么都不做。保持只显示空屏幕。
我在更新视图寻呼机时遇到问题。
AsynTask.java的onPostExecute方法
protected void onPostExecute(String result) {
Log.d("resultOnPostExecute", result);
//JSONObject data;
ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String, String>>();
////Intent intent = new Intent(getApplicationContext(), ResultActivity.class);
try {
if(!result.isEmpty()) {
JSONObject jObject = new JSONObject(result);
//data = jObject;
Log.d("STATUS", jObject.getString("success"));
String status = jObject.getString("success").toString();
if(status.equals("1")) {
JSONArray array = jObject.getJSONArray("reports");
for (int i = 0; i < array.length(); i++) {
JSONObject jo = array.getJSONObject(i);
Log.d("id", jo.getString("id"));
Log.d("image", jo.getString("image"));
images.add(jo.getString("image"));
//adapter().notifyDataSetChanged();
/*HashMap<String, String> department = new HashMap<>();
department.put("id", jo.getString("id"));
department.put("name", jo.getString("name"));
list.add(department);*/
}
adapter.updateList(images);
////intent.putExtra("result", result);
}
else
Toast.makeText(getApplicationContext(), "No doctor found", Toast.LENGTH_LONG).show();
}
//// else
//// intent.putExtra("result", "NOTHONG FIND");
} catch (JSONException e) {
e.printStackTrace();
}
//// startActivity(intent);
}
ViewPagerAdapter.java
package android.hmkcode.com.apicall;
import android.content.Context;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.List;
/**
* Created by umar on 3/7/2016.
*/
public class ViewPagerAdapter extends PagerAdapter {
Context c;
private ArrayList<String> _imagePaths;
private LayoutInflater inflater;
public ViewPagerAdapter(Context c, ArrayList<String> imagePaths) {
Log.d("CUEW OAFE ADAORER", "constructor");
this._imagePaths = imagePaths;
Log.d("size",this._imagePaths.size()+"");
this.c = c;
}
@Override
public int getCount() {
return this._imagePaths.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == (object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imgDisplay;
inflater = (LayoutInflater) c
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View viewLayout = inflater.inflate(R.layout.pager_item, container,
false);
imgDisplay = (ImageView) viewLayout.findViewById(R.id.image);
Picasso.with(c).load(_imagePaths.get(position)).into(imgDisplay);
(container).addView(viewLayout);
return viewLayout;
}
@Override
public void notifyDataSetChanged() {
Log.d("NOTFIY STATE CHANGED","NOTIFY STATE CHANGE");
super.notifyDataSetChanged();
}
@Override
public Parcelable saveState() {
return null;
}
/*public int getItemPosition(Object object) {
return POSITION_NONE;
}*/
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
(container).removeView((RelativeLayout) object);
}
public void updateList(ArrayList<String> images){
Log.d("updated list", "list update");
this._imagePaths = images;
Log.d("size",this._imagePaths.size()+"");
this.notifyDataSetChanged();
}
}
数据得到了更新,但用户界面仍然是空的。
每一个建议都被认可。
谢谢大家。
你为什么设置一个空列表?只需显示一些文本或进度加载器,直到json到达,然后设置适配器一次。 –
但它不让我这样做。因为onCreate活动首先将其分配给空适配器。并在此之后休息api响应。 –
就是这样!从onCreate中删除适配器代码,并在响应到达时执行它。 –