【问题标题】:How to append new Listview data to infinite scrolling ListView如何将新的 Listview 数据附加到无限滚动的 ListView
【发布时间】:2014-11-10 10:34:14
【问题描述】:

我正在尝试在我的应用 ListView 中实现无限滚动,但我得到的结果是 ListView 正在填充新数据而不是附加。

我不知道发生了什么……请帮帮我……sn-ps是

MainActivity.java

public class MainActivity extends FragmentActivity{
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_near_me);
 }
  CityListFragment cityFragment = new CityListFragment();
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.fragment_container, cityFragment).commit();
}

CityListFragment.java

public class CityListFragment extends Fragment {

private List<City> city;
private ListView listView;
CityListAdapter adapter;
ProgressDialog mProgressDialog;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    new MyTask().execute();
}

 public class MyTask extends AsyncTask<String, Void, List<City>> {

    @Override
    protected List<City> doInBackground(String... urls) {
        try {
            city = serviceProvider.getService().getCities();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return city;
    }

    @Override
    protected void onPostExecute(List<City> organization) {
        adapter = new CityListAdapter(getActivity(), city);
        listView.setAdapter(adapter);
        // Create an OnScrollListener
        listView.setOnScrollListener(new AbsListView.OnScrollListener() {

            @Override
            public void onScrollStateChanged(AbsListView view,
                                             int scrollState) { // TODO Auto-generated method stub
                int threshold = 1;
                int count = listView.getCount();

                if (scrollState == SCROLL_STATE_IDLE) {
                    if (listView.getLastVisiblePosition() >= count
                            - threshold) {
                        // Execute LoadMoreDataTask AsyncTask
                        new LoadMoreDataTask().execute();
                    }
                }
            }
        });
    }
}

public class LoadMoreDataTask extends AsyncTask<String, Void, List<City>> {
    @Override
    protected List<City> doInBackground(String... urls) {
        try {
            // web service request
            city = serviceProvider.getService().getNextCities();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return city;
    }

    @Override
    protected void onPostExecute(List<City> organization) {
        int position = listView.getLastVisiblePosition();
        adapter = new CityListAdapter(getActivity(), city);
        listView.setAdapter(adapter);
        adapter.notifyDataSetChanged();
        listView.setSelectionFromTop(position, 0);
        mProgressDialog.dismiss();
    }
}

}

它不是将新记录附加到 List 中,而是删除 ListView 中的旧记录 我关注了 Endless listview 实现的这个特定链接

http://www.androidbegin.com/tutorial/android-parse-com-listview-load-more-using-onscrolllistener-tutorial/

【问题讨论】:

    标签: android android-listview android-asynctask


    【解决方案1】:

    发生这种情况是因为您没有附加上一个列表。

    你的代码应该是这样的

        public class MyTask extends AsyncTask> {
    
            @Override 
            protected void onPreExecute() { 
                super.onPreExecute(); 
            } 
    
            @Override 
            protected List<City> doInBackground(String... urls) { 
                try { 
                    List<City> city_new = serviceProvider.getService().getCities(); 
        if(city_new  != null && city_new.size() > 0 ){
        city.addAll(city_new  )
        }
                } catch (IOException e) { 
                    e.printStackTrace(); 
                } 
                return city; 
            } 
    
            @Override 
            protected void onPostExecute(List<City> organization) { 
                adapter = new CityListAdapter(getActivity(), city); 
                listView.setAdapter(adapter); 
                // Create an OnScrollListener 
                listView.setOnScrollListener(new AbsListView.OnScrollListener() { 
    
                    @Override 
                    public void onScrollStateChanged(AbsListView view, 
                                                     int scrollState) { // TODO Auto-generated method stub 
                        int threshold = 1; 
                        int count = listView.getCount(); 
    
                        if (scrollState == SCROLL_STATE_IDLE) { 
                            if (listView.getLastVisiblePosition() >= count 
                                    - threshold) { 
                                // Execute LoadMoreDataTask AsyncTask 
                                new LoadMoreDataTask().execute(); 
                            } 
                        } 
                    } 
                }); 
            } 
        } 
    
        public class LoadMoreDataTask extends AsyncTask<String, Void, List<City>> {
            @Override 
            protected List<City> doInBackground(String... urls) {
                try { 
                    // web service request 
                    List<City> city_new = = serviceProvider.getService().getNextCities(); 
    if(city_new  != null && city_new.size() > 0 ){
    city.addAll(city_new  )
    }
                } catch (IOException e) {
                    e.printStackTrace();
                } 
                return city; 
            } 
    
            @Override 
            protected void onPostExecute(List<City> organization) {
                int position = listView.getLastVisiblePosition();
                adapter = new CityListAdapter(getActivity(), city); 
                listView.setAdapter(adapter); 
                adapter.notifyDataSetChanged(); 
                listView.setSelectionFromTop(position, 0);
                mProgressDialog.dismiss(); 
            } 
        } 
        }
    

    enter code here

    【讨论】:

      【解决方案2】:
        @Override 
              protected void onPostExecute(List<City> organization) {
                  int position = listView.getLastVisiblePosition();
                   previousCityList.addAll(city);**//add this line**
                  adapter = new CityListAdapter(getActivity(), previousCityList); 
                  listView.setAdapter(adapter); 
                  adapter.notifyDataSetChanged(); 
                  listView.setSelectionFromTop(position, 0);
                  mProgressDialog.dismiss(); 
              } 
      

      【讨论】:

        猜你喜欢
        • 2018-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-31
        • 1970-01-01
        • 2016-01-26
        相关资源
        最近更新 更多