gpt4 book ai didi

android - notifydatasetchanged() 无法正常工作

转载 作者:行者123 更新时间:2023-11-29 17:15:46 24 4
gpt4 key购买 nike

我有一个 listview 和一个 Baseadapter,但是 adapeter.notiydatasetchanged() 对我来说工作不正常......我在我的 listview 中得到一个适配器项目超过两次 :(

我的适配器类扩展了 baseadapter。

public class Event_update_adapter extends BaseAdapter {
private StartActivity activity = null;
private List<String> pokemonList = null;

public Event_update_adapter(StartActivity activity, List<String> p) {
super();
this.activity = activity;
this.pokemonList = p;
}
public void add(String data) {

this.pokemonList.add(data);

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

@Override
public String getItem(int i) {
return pokemonList.get(i);
}

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

@Override
public View getView(int position, View view, ViewGroup viewGroup) {
final ViewHolder holder;
final String pokemon = (String) getItem(position);

if (view == null) {
LayoutInflater layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(R.layout.event_updater_lv_item, viewGroup, false);
holder = new ViewHolder();
holder.name = (TextView) view.findViewById(R.id.event_update_in_list);

view.setTag(holder);
} else {
// get view holder back
holder = (ViewHolder) view.getTag();
}

// bind text with view holder content view for efficient use
holder.name.setText(pokemon);

return view;
}

private class ViewHolder {
TextView name=null;
}
}

这里是 ListView 和适配器数据的实现:

public class StartActivity extends AppCompatActivity
{

private Event_update_adapter adapter = null;
private List<String> adapter_data = new Vector<>();
private ListView mListView = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_start);
this.mContext = this;
initviews();

}


private void initviews() {
// adapter_data = new Vector<String>();
adapter = new Event_update_adapter((StartActivity) mContext,
adapter_data);

mListView = (ListView) findViewById(R.id.eventList);
mListView.setAdapter(adapter);
}

比起使用接收器,我正在更新适配器数据并调用 notifydatasetchanged()

收件人代码:

   BroadcastReceiver mReceiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
// Grab the bundle from the intent.
//Bundle bundle = intent.getExtras();

//Initializes the ViewPager.
if (intent.hasExtra(CommonForApp.UPDATE_LISTVIEW)) {

adapter.add(intent.getStringExtra(CommonForApp.UPDATE_LISTVIEW));
adapter.notifyDataSetChanged();
}
}

注意:我的接收器对于其他 Intent 工作正常,因此它们在接收器中没有问题。

我正在使用应用程序上下文和服务 postexceute() 函数中的后台线程发送广播,但是在 ListView 中至少有一项被推送了两次以上!

任何帮助将不胜感激!谢谢!

最佳答案

您没有将数据提供给您的适配器。您可以向适配器添加一个方法来更新数据:

public void add(String data) {

this.pokemonList.add(data);
}

将项目添加到适配器内的列表后,您可以调用 notifyDataSetChanged,列表将更新。

关于android - notifydatasetchanged() 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39094326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com