繁体   English   中英

SQLite插入后适配器未更新

[英]Adapter not Updating After SQLite Insertion

我的应用程序具有两个可以插入的表:“联系人”表和“消息”表。 每个表都有一个链接到它的ListView适配器,其想法是,当在其中一个表中插入新条目时,适配器将使用notifyDataSetChanged()更新并显示在ListView中。 我已经将其与“联系人”代码一起使用,但是当我尝试与“消息”代码(如下所示)进行相同操作时,它会将条目插入表中,但不会更新ListView。 仅当我卸载应用程序或升级SQLite数据库时,ListView才会更新。 我已经实现notifyDataSetChanged()并尝试从onResume()更新适配器和游标,但是没有任何区别。 我还检查了以下来源,但没有运气:

Android-添加到SQLite数据库后不会更新ListView,除非重新启动应用程序

notifyDataSetChanged后,Android ListView不刷新

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的活动:

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;
        }

    }
}

在公共getView()中返回convertView

还要检查此链接

ViewPager PagerAdapter不更新视图

实际上,您是在分页器适配器中而不是在列表视图适配器中应用notifyDataSetChanged,至少看起来是这样, 因此在listView适配器中应用notify DataSetChanged。 如果您在某个片段中定义了列表视图,而不是在片段中创建一个公共方法来更新数据集(您将在其中调用适配器的notifyDataSetChanged)并将在标签布局中使用的所有片段实例存储在一些稀疏数组中,您可以使用您的主要活动中的实例调用该片段的相应方法。 如果我错了,请发表评论,然后我将更新我的答案,因为我已经实现了类似的功能,并且我的代码运行良好。

因此,我感谢每个人的回答,但是当我终于能够恢复到该错误之后,事实证明服务器上的GCM实施存在问题。 一旦我注释掉了Android代码的GCM部分,该列表就会按预期进行更新。 我有点傻。 谢谢大家!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM