在SwipeRefreshLayout之后Listview没有更新

问题描述 投票:0回答:3

我有代码从我的服务器显示listview,但是当我从服务器更新数据并在我的应用程序中刷新它时,listview仍然获取旧数据,几分钟后我再次打开应用程序时,它更新了新数据我之前更新过。

我的主要片段

public class DosenFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {

    ListView list;
    SwipeRefreshLayout swipe;
    List<Dosen> itemList = new ArrayList<>();
    AdapterDosen adapter;

    private static final String TAG = DosenFragment.class.getSimpleName();

    private static String url_select = Server.URL + "select.php";

    public static final String TAG_ID_DOSEN = "id_dosen";
    public static final String TAG_NAME = "name";
    public static final String TAG_STATUS = "status";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.matkul_list, container, false);

            swipe = (SwipeRefreshLayout) v.findViewById(R.id.swipe_refresh_layout);
            list = (ListView) v.findViewById(R.id.list);

            adapter = new AdapterDosen(getActivity(), itemList);
            list.setAdapter(adapter);

            swipe.setOnRefreshListener(this);

            swipe.post(new Runnable() {

                       @Override
                       public void run() {
                               swipe.setRefreshing(true);
                               itemList.clear();
                               adapter.notifyDataSetChanged();
                               callVolley();
                       }
    });

    return v;
}

@Override
public void onRefresh() {
        itemList.clear();
        adapter.notifyDataSetChanged();
        callVolley();
        }

private void callVolley() {
        swipe.setRefreshing(true);

        JsonArrayRequest jArr = new JsonArrayRequest(url_select, new Response.Listener<JSONArray>() {

                @Override
                public void onResponse(JSONArray response) {
                        Log.d(TAG, response.toString());

                        // Parsing json
                        for (int i = 0; i < response.length(); i++) {
                                try {
                                        JSONObject obj = response.getJSONObject(i);
                                        Dosen item = new Dosen();

                                        item.setId_dosen(obj.getString(TAG_ID_DOSEN));
                                        item.setName(obj.getString(TAG_NAME));
                                        item.setAlamat(obj.getString(TAG_STATUS));

                                        itemList.add(item);
                                } catch (JSONException e) {
                                        e.printStackTrace();
                                }

                        }
                        adapter.notifyDataSetChanged();

                        swipe.setRefreshing(false);
                }
        }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                        VolleyLog.d(TAG, "Error: " + error.getMessage());
                        swipe.setRefreshing(false);
                }
        });

        AppController.getInstance().addToRequestQueue(jArr);
}

}

我试图用itemList.clear();adapter.notifyDataSetChanged();做一些事情,但没有任何改变。

我的主适配器

public class AdapterDosen extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<Dosen> items;

public AdapterDosen(Activity activity, List<Dosen> items) {
    this.activity = activity;
    this.items = items;
}

@Override
public int getCount() {
    return items.size();
}

@Override
public Object getItem(int location) {
    return items.get(location);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if (inflater == null)
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if (convertView == null)
        convertView = inflater.inflate(R.layout.list_row, null);

    Dosen data = items.get(position);

    TextView id = (TextView) convertView.findViewById(R.id.id);
    TextView name = (TextView) convertView.findViewById(R.id.nama);
    TextView alamat = (TextView) convertView.findViewById(R.id.alamat);

    id.setText(data.getId_dosen());
    name.setText(data.getName());
    alamat.setText(data.getAlamat());

    return convertView;
}

}

我很抱歉我的英语不好。

请帮忙。

android adapter swiperefreshlayout notifydatasetchanged
3个回答
0
投票

试试这个,在你的adatper中添加这个方法

public void updateList(List<Dosen> newlist) {
        items.clear();
        items.addAll(newlist);
        this.notifyDataSetChanged();
    }

callVolley()方法中,替换它

adapter.notifyDataSetChanged();

adapter.updateList();

希望这可以帮助


0
投票

使用以下代码... / *在RecyclerView.Adapter类* /

//清理回收器的所有元素

public void clear() { 
    items.clear(); 
    notifyDataSetChanged(); 
}

//添加项目列表 - 更改为使用的类型

public void addAll(List<Dosen> newlist) { 
    items.addAll(newlist); 
    notifyDataSetChanged(); 
}

callvolly()方法里面。

adapter.clear();
adapter.addAll(item);



public void onRefresh() {

        callVolley();
    }

0
投票

请尝试这个代码我已经改变了一些它会正常工作

 public class AdapterDosen extends BaseAdapter {
 private Activity activity;
private LayoutInflater inflater;
private List<Dosen> items;

public AdapterDosen(Activity activity, List<Dosen> items) {
    this.activity = activity;
    this.items = items;
}

public void setData(List<Dosen> items){
   this.items = items
  }

@Override
public int getCount() {
    return items.size();
}

@Override
public Object getItem(int location) {
    return items.get(location);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if (inflater == null)
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if (convertView == null)
        convertView = inflater.inflate(R.layout.list_row, null);

    Dosen data = items.get(position);

    TextView id = (TextView) convertView.findViewById(R.id.id);
    TextView name = (TextView) convertView.findViewById(R.id.nama);
    TextView alamat = (TextView) convertView.findViewById(R.id.alamat);

    id.setText(data.getId_dosen());
    name.setText(data.getName());
    alamat.setText(data.getAlamat());

    return convertView;
}

}

  public class DosenFragment extends Fragment implements 
  SwipeRefreshLayout.OnRefreshListener {

   ListView list;
  SwipeRefreshLayout swipe;
 List<Dosen> itemList = new ArrayList<>();
 AdapterDosen adapter;

private static final String TAG = DosenFragment.class.getSimpleName();

private static String url_select = Server.URL + "select.php";

public static final String TAG_ID_DOSEN = "id_dosen";
public static final String TAG_NAME = "name";
public static final String TAG_STATUS = "status";

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.matkul_list, container, false);

        swipe = (SwipeRefreshLayout) 
         v.findViewById(R.id.swipe_refresh_layout);
        list = (ListView) v.findViewById(R.id.list);

        adapter = new AdapterDosen(getActivity(), itemList);
        list.setAdapter(adapter);

        swipe.setOnRefreshListener(this);

        swipe.post(new Runnable() {

                   @Override
                   public void run() {
                           swipe.setRefreshing(true);
                           itemList.clear();
                           adapter.notifyDataSetChanged();
                           callVolley();
                   }
});

return v;

}

  @Override
  public void onRefresh() {
    //itemList.clear();
    //adapter.notifyDataSetChanged();
    callVolley();
    }

    private void callVolley() {
    swipe.setRefreshing(true);
     JsonArrayRequest jArr = new JsonArrayRequest(url_select, new 
     Response.Listener<JSONArray>() {
       @Override
            public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());
                          itemList .clear();
                    // Parsing json
                    for (int i = 0; i < response.length(); i++) {
                            try {
                                    JSONObject obj = 
                         response.getJSONObject(i);
                                    Dosen item = new Dosen();


item.setId_dosen(obj.getString(TAG_ID_DOSEN));
                                    item.setName(obj.getString(TAG_NAME));

item.setAlamat(obj.getString(TAG_STATUS));

                                    itemList.add(item);
                            } catch (JSONException e) {
                                    e.printStackTrace();
                            }

                    }
                     adapter.setData(itemList );
                    adapter.notifyDataSetChanged();
                   swipe.setRefreshing(false);
            }
    }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());
                    swipe.setRefreshing(false);
            }
    });

    AppController.getInstance().addToRequestQueue(jArr);
}  
© www.soinside.com 2019 - 2024. All rights reserved.