我是 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, myViewGroup, true);
我得到错误:java.lang.IllegalStateException:指定的孩子已经有一个父母。您必须首先在孩子的父母上调用 removeView()。
我敢肯定,我错过了一些重要的事情,但我没有。任何建议将不胜感激。
提前致谢,