Dig*_*oun 7 android android-tabhost android-fragments
我是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);
}
Run Code Online (Sandbox Code Playgroud)
为了能够在片段内编译此方法,我改变了:
LayoutInflater lf = getLayoutInflater();
Run Code Online (Sandbox Code Playgroud)
至
LayoutInflater lf = getActivity().getLayoutInflater();
Run Code Online (Sandbox Code Playgroud)
和
addContentView(btns,params);
Run Code Online (Sandbox Code Playgroud)
至
getActivity().addContentView(btns,params);
Run Code Online (Sandbox Code Playgroud)
但是像我这样使用我的方法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);
}
Run Code Online (Sandbox Code Playgroud)
这样做我的按钮仍然显示在我的一般视图的底部,而不是在我的片段的底部,如果我尝试将attachToRoot布尔值更改为true:
btns = lf.inflate(R.layout.mallmapactivity_level_buttons, myViewGroup, true);
Run Code Online (Sandbox Code Playgroud)
我收到错误:java.lang.IllegalStateException:指定的子级已经有父级.您必须首先在孩子的父母上调用removeView().
我确信,我错过了一些重要但我不知道的事情.任何建议都会非常感激.
提前致谢,
Bha*_*rma 12
如果您在扩充布局时遇到问题,那么您可以使用以下代码:
View headerView = View.inflate(this, R.layout.layout_name, null);
Run Code Online (Sandbox Code Playgroud)
这将为您提供完整的父布局,然后您可以使用该布局来获取您想要的任何视图,或者您可以获得布局参数,然后将布局参数设置为任何视图(在您认为的情况下按钮).
| 归档时间: |
|
| 查看次数: |
15719 次 |
| 最近记录: |