我的應用程序有兩個表可以插入到: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 –