gpt4 book ai didi

android - 在 onTabSelected 中玩 fragment

转载 作者:行者123 更新时间:2023-11-30 03:09:30 25 4
gpt4 key购买 nike

亲爱的,

我搜索了这个问题超过一天,但没有找到。我完全执行此处发布的代码:

Adding Navigation Tabs

我的 onTabSelected 代码如下:

public void onTabSelected(Tab tab, FragmentTransaction ft) {
// Check if the fragment is already initialized
if (mFragment == null) {
// If not, instantiate and add it to the activity
mFragment = Fragment.instantiate(mActivity, mClass.getName());
ft.add(R.id.alert_fragment_container, mFragment, mTag);
} else {
// If it exists, simply attach it in order to show it
ft.attach(mFragment);
}

// prepare adapter for ExpandableListView

Log.i("After Adapter Created", "Passed");

final ExpandableListAdapter expListAdapter = new AlertsAdapter(
mActivity, myAlerts, violations);

Log.i("After Adapter Initialized", "Passed");

((MyCustomFragment)mFragment).violations.setAdapter(expListAdapter);
}

代码在最后一行之前工作正常,我需要在 onCreateView 中为在 MyCustomFragment 中初始化的公共(public)静态列表设置适配器,这里是我的 fragment 代码:

public class MyCustomFragment extends Fragment {

public MyCustomFragment() {
}

public static ExpandableListView violations;

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

violations = (ExpandableListView) rootView.findViewById(R.id.POIAlertList);

Log.i("onCreateView POI", "Called");

return rootView;
}
}

它给出空指针错误。通过我的调试日志,我注意到此日志 Log.i("onCreateView POI", "Called"); 出现在此 Log.i("After Adapter Initialized", "Passed");。这意味着我正在尝试为尚未初始化的 fragment 设置适配器。

这正是我面临的问题,我需要根据 onTabSelected 中的选项卡选择向 ExpandableListView 提供数据。

我做错了什么?什么是最好的解决方案?

问候,

最佳答案

看来你需要一个ViewPager,我几天前刚刚实现了一个导航选项卡,这是我的代码,它在 4 个 fragment 之间导航:

public class MainActivity extends FragmentActivity implements ActionBar.TabListener{
private ActionBar actionBar;
private ViewPager mViewPager;
private AppSectionsPagerAdapter mAppSectionsPagerAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager());
actionBar=getActionBar();
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mAppSectionsPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
actionBar.addTab(actionBar.newTab().setIcon(R.drawable.icon1).setTabListener(this));
actionBar.addTab(actionBar.newTab().setIcon(R.drawable.icon2).setTabListener(this));
actionBar.addTab(actionBar.newTab().setIcon(R.drawable.icon3).setTabListener(this));
actionBar.addTab(actionBar.newTab().setIcon(R.drawable.icon4).setTabListener(this));
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
getMenuInflater().inflate(R.menu.action_menu, menu);
return true;
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub

}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
mViewPager.setCurrentItem(tab.getPosition());

}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub

}

这是适配器:

public class AppSectionsPagerAdapter extends FragmentPagerAdapter {
public AppSectionsPagerAdapter(FragmentManager fm) {
super(fm);
}

@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
return new Fragment1();
case 1:
return new Fragment2();
case 2:
return new Fragment3();
case 3:
return new Fragment4();
}
return null;
}

@Override
public int getCount() {
return 4;
}

}

关于android - 在 onTabSelected 中玩 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21228602/

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