我的应用程序有两个表可以插入到:Contacts表和Messages表。每个表都有一个链接到它的ListView适配器,并且想法是当一个新条目插入到任一表中时,适配器将使用notifyDataSetChanged()
进行更新,并且将显示在ListView中。我已经将它与联系人代码一起使用,但是当我使用Messages代码(如下所示)尝试同样的事情时,它会将条目插入表中,但不会更新ListView。当我卸载应用程序或升级SQLite数据库时,ListView只会更新。我有notifyDataSetChanged()
实施并尝试更新从onResume()
适配器和光标,但它没有任何区别。我还检查了这些资源,除其他外,并没有运气:适配器SQLite插入后不更新
Android - ListView not being updated after adding to SQLite database unless app is restarted
Android ListView not refreshing after notifyDataSetChanged
onPostExecute()
是获取数据和更新适配器:
// Saves all data received into a cursor, which is then saved to the
// List<Message> object
List<Message> arrayOfMessages = dbHelper.getAllMessages();
dbHelper.close();
final MessagesAdapter adapter = new MessagesAdapter(getContext(), arrayOfMessages);
ListView listView = (ListView) getActivity().findViewById(R.id.messages_listview);
listView.setAdapter(adapter);
fragmentsPagerAdapter.notifyDataSetChanged();
swipeRefreshLayout.setRefreshing(false);
消息适配器类
public class MessagesAdapter extends ArrayAdapter<Message> {
public MessagesAdapter(Context context, List<Message> messages) {
super(context, 0, messages);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get the data item for this position
Message message = getItem(position);
// Get rest of convertView...
}
}
下面是处理的标签布局和ViewPager活动:在公共getView
public class WhoopNavigationActivity extends AppCompatActivity
implements FeedFragment.OnFragmentInteractionListener, NetworkFragment.OnFragmentInteractionListener,
ProfileFragment.OnFragmentInteractionListener, NetworkNewModal.NetworkNewModalListener {
SaveStateParams saveStateParams = new SaveStateParams();
ServerPost serverPost = new ServerPost();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_whoop_navigation);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final FragmentsPagerAdapter fragmentsPagerAdapter = new FragmentsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
final ViewPager mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(fragmentsPagerAdapter);
// View of activity
View view = findViewById(android.R.id.content);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
}
public static class FragmentsPagerAdapter extends FragmentStatePagerAdapter {
// Constructor
public FragmentsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch(position) {
case 0:
return FeedFragment.newInstance();
case 1:
return NetworkFragment.newInstance();
case 2:
return ProfileFragment.newInstance();
}
return null;
}
@Override
public int getCount() {
// Show 3 total pages.
return 3;
}
public int getItemPosition(Object item) {
// Causes adapter to reload all Fragments when notifyDataSetChanged is called
return POSITION_NONE;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Feed";
case 1:
return "Network";
case 2:
return "Profile";
}
return null;
}
}
}
检查这个答案http://stackoverflow.com/questions/14503006/android-listview-not-refreshing-after-notifydatasetchanged?lq=1 –
@ Ahmad.Aslam90:谢谢你的答案!我已经看过了,我已经尝试在'onResume()'中更新游标和适配器,并用'arrayOfMessages.addAll(dbHelper.getAllMessages)'替换'List arrayOfMessages = dbHelper.getAllMessages();' (以及其他必要的变化),但没有运气。 –
jexx04
你可以尝试一个CursorAdapter而不是ArrayAdapter,因为你正在使用SQLite –