私はAndroid開発の初心者で、現在、タブホストと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() を呼び出す必要があります。
私は確かに、私は何か重要なことを逃しましたが、私は何も知りません。任意の提案をいただければ幸いです。
前もって感謝します、