0
我有一個帶有自定義視圖的對話框片段。自定義視圖的背景顏色也會根據從newInstance()
方法傳入的參數而變化。爲了確定它實際上是一個不同的DialogFragment實例,我還通過了另一個參數newInstance()
方法,即對話框標題。背景顏色也可以接受null
值,在這種情況下,不設置背景顏色。DialogFragment的充氣視圖正在下次使用中重用
現在問題是:當我第二次顯示帶有背景色的null
值的對話框片段時,即使標題已經不同,膨脹的視圖仍然具有最後顯示的對話框片段的背景顏色。爲什麼系統重複使用最後一個充氣視圖?不應該背景顏色爲空?我沒有正確理解什麼?
MyDialogFragment.java
public static MyDialogFragment newInstance(String title, Integer bgColor) {
MyDialogFragment df = new MyDialogFragment();
Bundle args = new Bundle();
args.putString(TITLE_ARG, title);
args.putSerializable(BG_ARG, bgColor);
df.setArguments(args);
return df;
}
...
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Bundle args = getArguments();
Integer bgColor = (Integer) args.getSerializable(BG_ARG);
View view = getActivity().getLayoutInflater().inflate(R.layout.my_dialog_fragment, null);
// check if null was passed
if(bgColor != null)
((GradientDrawable) view.getBackground()).setColor(bgColor);
return new AlertDialog.Builder(getActivity())
.setTitle(args.getString(TITLE_ARG))
.setView(view)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.ok, null)
.create();
}
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getSupportFragmentManager();
MyDialogFragment df = (MyDialogFragment) fm.findFragmentByTag(MyDialogFragment.TAG);
if(df == null) {
df = MyDialogFragment.newInstance("title1", Color.GREEN);
df.show(fm, MyDialogFragmentTAG);
}
}
});
findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getSupportFragmentManager();
MyDialogFragment df = (MyDialogFragment) fm.findFragmentByTag(MyDialogFragment.TAG);
if(df == null) {
df = MyDialogFragment.newInstance("title2", null);
df.show(fm, MyDialogFragmentTAG);
}
}
});
}
代碼片段很好。主活動上按鈕2的點擊意味着對話框片段已被解除。否則,如果仍然顯示對話框片段,則不能單擊button2。因此,單擊button2時df已爲空,因此會顯示一個新的對話框片段。 –
你能分享所有的代碼嗎?我寫了一個小測試,它可以很好地使用'view.setBackgroundColor()'。 對於關閉的對話框你是對的,所以根本不需要搜索片段,在對話焦點時不能按下按鈕1或按鈕2。 –
我沒有使用'view.setBackgroundColor()',因爲我在xml中爲'android:background'屬性使用了'Drawable'。我將製作單獨的項目和分享代碼。 –