Javascript FragmetPagerAdapter显示错误数据的第一个选项卡

Javascript FragmetPagerAdapter显示错误数据的第一个选项卡,javascript,android,sqlite,tabs,fragmentpageradapter,Javascript,Android,Sqlite,Tabs,Fragmentpageradapter,我正试图实现一个FragmentPagerAdapter,它基于从SQLite DB列检索不同值的游标动态创建选项卡。 然后,ListFragment根据第二个光标加载数据,该光标使用基于选项卡名称的过滤器选择数据。 最后,我添加了一个包含“所有”数据的选项卡,而不是一个子集 除了将正确的数据放入第一张“全部”工作表之外,所有工作都进行得很顺利。ListFragment onCreateLoader从不选择“全部”,而是根据第二个选项卡的名称以某种方式在第一个和第二个选项卡中提取数据 我的代码(

我正试图实现一个
FragmentPagerAdapter
,它基于从SQLite DB列检索不同值的
游标动态创建选项卡。
然后,
ListFragment
根据第二个
光标加载数据,该光标使用基于选项卡名称的过滤器选择数据。
最后,我添加了一个包含“所有”数据的选项卡,而不是一个子集

除了将正确的数据放入第一张“全部”工作表之外,所有工作都进行得很顺利。
ListFragment onCreateLoader
从不选择“全部”,而是根据第二个选项卡的名称以某种方式在第一个和第二个选项卡中提取数据

我的代码(过滤相关性;希望不会太多)

main活动

public类MainActivity扩展了AppCompatActivity{
//存储选项卡详细信息的选项卡列表
私有ArrayList选项卡名;
//在首次从sqlite db获取数据时保存制表符数据
私有游标选项卡游标;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(com.simsolec.flavorsaver.R.layout.activity_main);
getTabs();
//创建一个适配器,它知道应该在每个页面上显示哪个片段
FlavorFragmentPagerAdapter适配器=新的FlavorFragmentPagerAdapter(
getSupportFragmentManager(),MainActivity.this,选项卡名);
//查找允许用户在片段之间滑动的视图寻呼机
ViewPager mViewPager=findViewById(com.simscolec.flavorsaver.R.id.ViewPager);
//将适配器设置到视图寻呼机上
mViewPager.setAdapter(适配器);
//将视图页导航提供给表格布局
TabLayout TabLayout=findviewbyd(com.simsollec.flavorsaver.R.id.slide_tabs);
tabLayout.setupWithViewPager(mviewpage);
}
私有void getTabs(){
试一试{
字符串[]投影={FlavorEntry.COLUMN_FLAVOR_RANGE};
tabCursor=getContentResolver().query(
FlavorEntry.CONTENT_URI_DISTINCT,
投影,
无效的
无效的
FlavorEntry.COLUMN_FLAVOR_RANGE);
tabNames=newarraylist();
选项卡名称。添加(“全部”);
if(tabCursor!=null&&tabCursor.getCount()>0){
if(tabCursor.moveToFirst()){
做{
字符串标签名;
tabName=tabCursor.getString(0);
tabName.add(tabName);
}while(tabCursor.moveToNext());
}
tabCursor.close();
}
}捕获(NullPointerException | SQLException e){
}
最后{
tabCursor.close();
}
}

}
从Bundle而不是从
newInstance()
方法设置
mTabName
的值,因为mTabName定义为static,所以从
mTabName

 public static FlavorListFragment newInstance(String tabName) {
        FlavorListFragment fragment = new FlavorListFragment();
       // mTabName = tabName;
        Bundle args = new Bundle();
        args.putString(ARG_TAB_NAME, tabName);
        fragment.setArguments(args);
        return fragment;
    }
OnCreateView of
FlavorListFragment

 @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(com.simsolec.flavorsaver.R.layout.fragment_flavor_list,
                    container, false);


        Bundle b= getArguments();
        //mTabName=b.getString(mTabName);
mTabName=b.getString(ARG_TAB_NAME);
}

您确定sqlite有
*
通配符作为
类运算符
?我不这么认为。。。大多数SQL为此使用不同的通配符。。。但更重要的是,我们可以在运算符
中使用带有
的通配符吗?我不这么认为<代码>其中('*')中的ColumnX显然将只返回ColumnX中的值等于'*'的行。。。所以显而易见的解决方案是,当
tabName=='All'
(感谢@Selvin指出空建议。也感谢你提醒我如何不比较字符串…我应该提到这是我第一次尝试编写Excel宏以外的任何代码,因此提供比较字符串的正确方法会更有帮助。感谢@jignesh。我已经删除了static并应用了建议的c更改。但是现在mTabName仍然为
null
,因此所有选项卡都不起作用。只需在本地使用它(在onCreateLoader内)他在这里为我的无知提供了道歉,但在onCreateLoader中mTabName不再可用。@Selvin有任何进一步的建议吗?我应该更新上面的更改以澄清吗?在onCreateLoader中使用局部变量谢谢你们两个@Selvin。在你们的帮助下,我能够解决这个问题。还需要对e b.getString(mTabName)语句,必须是“tabName”。不知道为什么这两次被否决……即使对于一个绝对的新手来说,这个问题有那么糟糕吗?