我是一名Android开发新手,目前正在使用TabHost和TabActivity创建应用程序以在不同的活动之间切换。这个应用程序运行良好,但我最近发现TabActivity已被弃用,应该使用Fragment代替。
因此,我按照这篇很棒的教程进行操作: http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/ 其中大部分都可以正常工作,但我的问题是,我的一些旧活动现在变成了片段,并且使用以下方法填充ImageButton:
为了能够在片段中编译此方法,我进行了更改:
这样做会使我的按钮仍然显示在我的通用视图底部,而不是在片段底部。如果我尝试将attachToRoot布尔值更改为true:
我遇到了一个错误:java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
我确定,我错过了一些重要的东西,但我不知道是什么。非常感谢您的任何建议。
先提前致谢。
因此,我按照这篇很棒的教程进行操作: 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();
to
LayoutInflater lf = getActivity().getLayoutInflater();
并且
addContentView(btns,params);
to
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: The specified child already has a parent. You must call removeView() on the child's parent first.
我确定,我错过了一些重要的东西,但我不知道是什么。非常感谢您的任何建议。
先提前致谢。