我是
android开发的新手,我当前正在使用tabhost创建一个应用程序,并使用TabActivity在不同的活动之间切换.这个应用程序工作正常,但我最近发现TabActivity已被弃用,我应该使用片段代替.
所以,我按照这个伟大的教程解释如何这样做:
http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/
大多数工作正常,但我的问题是我的一些旧活动,现在碎片是使用这种方法膨胀ImageButton:
private void displayLevelButtons() { LayoutInflater lf = getLayoutInflater(); btns = lf.inflate(R.layout.mallmapactivity_level_buttons,null,false); mBtnLevelDown = (ImageButton) btns.findViewById(R.id.btn_level_down); mBtnLevelUp = (ImageButton) btns.findViewById(R.id.btn_level_up); mBtnLevelDown.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { levelDown(); updateLevelButtons(); } }); mBtnLevelUp.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { levelUp(); updateLevelButtons(); } }); LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL | Gravity.RIGHT; addContentView(btns,params); }
为了能够在片段内编译此方法,我改变了:
LayoutInflater lf = getLayoutInflater();
至
LayoutInflater lf = getActivity().getLayoutInflater();
和
addContentView(btns,params);
至
getActivity().addContentView(btns,params);
但是像我这样使用我的方法displayLevelButtons()使我的按钮出现在我的一般视图的右下角,而不是我片段的右下角.
我还尝试在使用图像按钮扩充布局时指定一个根,我的所有片段类看起来像这样:
public class MyFragment extends Fragment { private View btns; private ImageButton mBtnLevelUp; private ImageButton mBtnLevelDown; private ViewGroup myViewGroup; @Override public View onCreateView (LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) { if (container == null) { return null; } myViewGroup = container; v = inflater.inflate(R.layout.mallmaptile,container,false); return v; } @Override public void onViewCreated(View view,Bundle savedInstanceState) { //Do some stuff and then : displayLevelButtons(); } private void displayLevelButtons() { LayoutInflater lf = getActivity().getLayoutInflater(); btns = lf.inflate(R.layout.mallmapactivity_level_buttons,myViewGroup,false); mBtnLevelDown = (ImageButton) btns.findViewById(R.id.btn_level_down); mBtnLevelUp = (ImageButton) btns.findViewById(R.id.btn_level_up); mBtnLevelDown.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { levelDown(); updateLevelButtons(); } }); mBtnLevelUp.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { levelUp(); updateLevelButtons(); } }); LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL | Gravity.RIGHT; getActivity().addContentView(btns,params); }
这样做我的按钮仍显示在我的一般视图的底部,而不是在我的片段的底部,如果我尝试将attachToRoot布尔值更改为true:
btns = lf.inflate(R.layout.mallmapactivity_level_buttons,true);
我收到错误:java.lang.IllegalStateException:指定的子级已经有父级.您必须首先在孩子的父母上调用removeView().
我确信,我错过了一些重要但我不知道的事情.任何建议都会非常感激.
提前致谢,