我有一个包含NavigationDrawer的Activity,如果我输入某个项目,这个NavDrawer会启动一个片段。因此,在其中一个中,我有一个片段,其中包含带有4个片段的TabHost,使用PageViewer(PacksFragment)进行滑动效果。
问题留在TabHost的第一个片段,即TabFragmentA。当我在做界面时,它会打开并正常运行。但是当我开始编程时,每次我要测试,或者应用程序无法打开,或者当我输入TabFragmentA的片段父级时应用程序停止工作
活动和片段的顺序是这样的: MainActivity> PacksFragment> TabFragmentA,TabFragmentB,TabFragmentC,TabFragmentD
PacksFragment.java
public class PacksFragment extends Fragment
implements ViewPager.OnPageChangeListener, TabHost.OnTabChangeListener {
TabHost tabHost;
ViewPager viewPager;
public PacksFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_packs, container, false);
final TabHost host = (TabHost) view.findViewById(R.id.tabhost);
host.setup();
viewPager = (ViewPager) view.findViewById(R.id.viewPager);
List<Fragment> listFragments = new ArrayList<Fragment>();
listFragments.add(new TabFragmentA());
listFragments.add(new TabFragmentB());
listFragments.add(new TabFragmentC());
listFragments.add(new TabFragmentD());
MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(
getFragmentManager(), listFragments);
viewPager.setAdapter(myFragmentPagerAdapter);
viewPager.setOnPageChangeListener(this);
tabHost = (TabHost) view.findViewById(R.id.tabhost);
tabHost.setup();
String[] tabNames = {"NUIA", "HARANYA", "OCEANIC", "AURORIA"};
for(int i=0; i<tabNames.length; i++) {
TabHost.TabSpec tabSpec;
tabSpec = tabHost.newTabSpec(tabNames[i]);
tabSpec.setIndicator(tabNames[i]);
tabSpec.setContent(new FakeContent(getActivity().getApplicationContext()));
tabHost.addTab(tabSpec);
View tabView = host.getTabWidget().getChildTabViewAt(i);
tabView.setPadding(0, 0, 0, 0);
TextView tv = (TextView)tabView.findViewById(android.R.id.title);
tv.setSingleLine();
tv.setTextSize(13);
tv.setTextColor(0xFFFFFFFF);
}
tabHost.setOnTabChangedListener(this);
return view;
}
public class FakeContent implements TabHost.TabContentFactory {
Context context;
public FakeContent(Context mcontext) {
context = mcontext;
}
@Override
public View createTabContent(String tag) {
View fakeView = new View(context);
fakeView.setMinimumHeight(0);
fakeView.setMinimumWidth(0);
return fakeView;
}
}
@Override
public void onTabChanged(String tabId) {
int selectedItem = tabHost.getCurrentTab();
viewPager.setCurrentItem(selectedItem);
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int selectedItem) {
tabHost.setCurrentTab(selectedItem);
}
}
TabFragmentA.java
public class TabFragmentA extends Fragment {
Spinner spinnerLocalCrafting;
private static final String[]locates = {"Solzreed Peninsula", "Gweonid Forest", "Lilyut Hills", "Dewstone Planes", "White Arden",
"Marianople", "Two Crowns", "Cinderstone Moore", "Halcyona", "Hellswamp", "Sanddeep", "Airain Rock", "Aubre Cradle",
"Ahnimar", "Karkasse Ridgelands"};
private List<RadioButton> tipoPackRadioButtons;
private static final int[] IDS_TIPOPACK_RADIO = { R.id.tipoPackRadio1, R.id.tipoPackRadio2, R.id.tipoPackRadio3,
R.id.tipoPackRadio4, R.id.tipoPackRadio5, R.id.tipoPackRadio6};
public TabFragmentA() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab_layout_a, container, false);
//Spinner
spinnerLocalCrafting = (Spinner) v.findViewById(R.id.spinnerLocalCrafting);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, locates);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerLocalCrafting.setAdapter(adapter);
spinnerLocalCrafting.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//TabFragmentA tabFragmentA = new TabFragmentA();
//tabFragmentA.setSpinnerSelected(position);
//methodCalculate();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
Log.d("FUCK", String.valueOf(getActivity()));
// Not return NULL
//RadioButtons
tipoPackRadioButtons = new ArrayList<RadioButton>();
for(int id : IDS_TIPOPACK_RADIO) {
RadioButton tipoPackRadioBt = (RadioButton) v.findViewById(id);
tipoPackRadioButtons.add(tipoPackRadioBt);
}
//RadioGroup
RadioGroup radioGroupTipoPack = new RadioGroup(getActivity());
int count2 = 0;
while(count2 < 6) {
radioGroupTipoPack.addView(tipoPackRadioButtons.get(count2));
count2++;
}
return v;
}
public static TabFragmentA newInstance(String text) {
TabFragmentA f = new TabFragmentA();
Bundle b = new Bundle();
b.putString("msg", text);
f.setArguments(b);
return f;
}
/*public static int spinnerSelected;
public static void setSpinnerSelected(int spinnerSelected) {
TabFragmentA.spinnerSelected = spinnerSelected;
}*/
/*public void methodCalculate() {
int count = 0;
while(count < 16) {
switch (spinnerSelected) {
case count:
break;
}
count++;
}
}*/
}
答案 0 :(得分:1)
您尝试将RadioButton
添加到已添加到另一个View
的{{1}}。在这一行中,您可以从View
获得RadioButton
:
View
然后您尝试再次将它们添加到RadioButton tipoPackRadioBt = (RadioButton) v.findViewById(id);
:
View
1-如果您已经在radioGroupTipoPack.addView(tipoPackRadioButtons.get(count2));
中定义了RadioButton
,则无需再次添加它们,只需通过xml
找到它们并根据需要进行编辑 - &gt ;删除第二行
2-如果您想在运行时动态定义findViewById
,只需将RadioButton
留空,然后充气或创建RadioGroup
并将其添加到群组中 - &gt;删除第1行。
PS:你也可以尝试从他们的父RadioButton
删除RadioButton
并将其添加到另一个view
但是它容易出错,你应该避免这样做,除非你真的需要..