![](/img/trans.png)
[英]BaseAdapter NotifyDatasetChanged() getView() Not Working
[英]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;
}
}
@覆蓋
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.