簡體   English   中英

ListView Baseadapter notifyDataSetChanged()不起作用

[英]ListView Baseadapter notifyDataSetChanged() not working

我在視圖分頁器中有列表視圖。 當我更新列表並嘗試通過notifyDataSetChanged()更新列表視圖時,它不起作用並且無法更新列表。 首先調用List異步任務以獲取列表,然后調用LoadMoreList以獲取更多數據。

如果我將列表視圖移到視圖分頁器之外,則notifyDataSetChanged正在工作,但在視圖分頁器內部則無法工作。

private class List extends AsyncTask<Void, Void, String> {

    ArrayList<String> loadMoreList;
    @Override
    public String doInBackground(Void... params) {
        loadMoreList = WebFunctions.getEventList();

        return null;
    }

    @Override
    public void onPreExecute() {
    }

    @Override
    public void onPostExecute(String string) {
        if(loadMoreList != null){
            eventList.addAll(loadMoreList);
            adapter = new myPagerAdapter(thisContext, eventList);
            myPager.setAdapter(adapter );

            }
    }
}

異步任務以獲取更多數據。

private class LoadMoreList extends AsyncTask<Void, Void, String> {

    ArrayList<String> loadMoreList;
    @Override
    public String doInBackground(Void... params) {
        loadMoreList = WebFunctions.getEventList();

        return null;
    }

    @Override
    public void onPreExecute() {
        }

    @Override
    public void onPostExecute(String string) {
        if(loadMoreList != null){
            eventList.addAll(loadMoreList);
            myAdapter.notifyDataSetChanged();

            } 
    }
}

查看尋呼機適配器

 //Custom pager adapter
private class myPagerAdapter extends PagerAdapter
{
    ArrayList<String> eventlist;
    private final Context context;
    private LayoutInflater inflater;
    public myPagerAdapter (Context context , ArrayList<String> events)
    {
        this.eventlist = events;
        this.context = context;
        this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount() {

        return eventlist.size();
    }

    @Override
    public Object instantiateItem(View container, int position) {

        final LinearLayout page = (LinearLayout) inflater.inflate(R.layout.event_list, null);

        listView = (ListView) page.findViewById(R.id.listView);
        myAdapter = new myAdapter(eventList);
        listView.setAdapter(myAdapter);
        ((ViewPager) container).addView(page);

        return page;
    }
    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == ((View) arg1);
    }

    @Override
    public void destroyItem(View arg0, int arg1, Object arg2) {
        ((ViewPager) arg0).removeView((View) arg2);

    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}

這是myAdpter

 //list adapter
public class myAdapter extends BaseAdapter {
    private final ArrayList<ContactMoadel> contact;

    public myAdapter(ArrayList<String> contactlist) {
        this.contact = contactlist;
    }

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

    @Override
    public Object getItem(int position) {
        return null;
    }

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

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

        retrun convertView;
    }
}
  • 我認為可能存在問題,因為您從doInBackground方法返回null,將返回值更改為loadMoreList

@覆蓋

public String doInBackground(Void... params) {
  loadMoreList = WebFunctions.getEventList();

  return loadMoreList;
}

解決了問題。 我應該在第一次獲取事件列表時設置適配器。 在列表異步任務中

@Override
public void onPostExecute() {
    if(loadMoreList != null){
        eventList.addAll(loadMoreList);
        myAdapter = new myAdapter(thisContext, eventList);  
}

並在LoadMoreList中

@Override
public void onPostExecute() {
    if(loadMoreList != null){
        eventList.addAll(loadMoreList);
        myAdapter.notifyDataSetChanged();
}

View Pager適配器應該是這樣的

 //Custom pager adapter
private class myPagerAdapter extends PagerAdapter
{
    ArrayList<String> eventlist;
    private final Context context;
    private LayoutInflater inflater;
    public myPagerAdapter (Context context , ArrayList<String> events)
   {
       this.eventlist = events;
       this.context = context;
       this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   }
    @Override
    public int getCount() {

        return eventlist.size();
    }

    @Override
    public Object instantiateItem(View container, int position) {

        final LinearLayout page = (LinearLayout) inflater.inflate(R.layout.event_list,   null);

        listView = (ListView) page.findViewById(R.id.listView);
        listView.setAdapter(myAdapter);
        ((ViewPager) container).addView(page);

        return page;
   }
   @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == ((View) arg1);
    }

    @Override
    public void destroyItem(View arg0, int arg1, Object arg2) {
        ((ViewPager) arg0).removeView((View) arg2);

   }

   @Override
   public int getItemPosition(Object object) {
        return POSITION_NONE;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM