2016-03-07 48 views
0

我正在使用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(); 
} 
} 

数据得到了更新,但用户界面仍然是空的。

每一个建议都被认可。

谢谢大家。

+1

你为什么设置一个空列表?只需显示一些文本或进度加载器,直到json到达,然后设置适配器一次。 –

+0

但它不让我这样做。因为onCreate活动首先将其分配给空适配器。并在此之后休息api响应。 –

+0

就是这样!从onCreate中删除适配器代码,并在响应到达时执行它。 –

回答

2
  1. 您需要将数组初始化为空并传递给viewpager适配器。
  2. 你viewpager将单与空视图
  3. 当你调用AsynTask再加入所有的数组项viewpager适配器,如果你想进一步再发布您的代码通知
+0

如何添加viewpager适配器中的所有数组项目?让我尝试创建一个函数来重新传递更新数组并重新分配它。但如何在更新数组后通知适配器? –

+1

数据到达后,在适配器上使用'notifyDataSetChanged()'。 – Omkar

+1

您可以在适配器addList(ArrayList的)添加方法{// 添加的所有项目viewpager适配器列表 } –