我是android開發新手,我當前正在創建一個使用tabhost和TabActivity在不同活動之間切換的應用程序。此應用程序工作正常,但我最近發現TabActivity已被棄用,我應該使用片段。以編程方式在片段內用ImageButton膨脹佈局
於是,我按照這個偉大的教程,說明如何做到這一點: 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()。
我相信,我錯過了一些重要的東西,但我什麼都沒有。任何建議將非常感激。
由於提前,
我想: btns = View.inflate(getActivity( ),R.layout。mallmapactivity_level_buttons,null); 我不能使用「this」,因爲我的類擴展了一個片段,所以我使用「getActivity()」來代替,但我不確定它是否是獲取片段上下文的好方法。 無論如何這樣做仍然膨脹我的看法根據我的一般看法,而不是根據我的片段 – Digoun 2012-04-20 05:19:41
確實,使用btns = View.inflate(v.getContext(),R.layout.mallmapactivity_level_buttons,myViewGroup);它的工作知道。謝謝 – Digoun 2012-04-20 08:58:07
我用列表視圖解決了幾個問題。歡迎.. – 2012-04-20 09:29:51