Android 在片段上第二次膨胀对话框时出错
我使用了这个库:为了在我的应用程序上有一个颜色选择器,在实现它之后,我不能多次使用它,当我第二次尝试打开颜色选择器时,它会出现以下错误:Android 在片段上第二次膨胀对话框时出错,android,android-fragments,android-alertdialog,Android,Android Fragments,Android Alertdialog,我使用了这个库:为了在我的应用程序上有一个颜色选择器,在实现它之后,我不能多次使用它,当我第二次尝试打开颜色选择器时,它会出现以下错误: FATAL EXCEPTION: main Process: com.example.mobiware.ivaapp, PID: 14147
FATAL EXCEPTION: main
Process: com.example.mobiware.ivaapp, PID: 14147
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:4656)
at android.view.ViewGroup.addView(ViewGroup.java:4497)
at android.view.ViewGroup.addView(ViewGroup.java:4437)
at android.view.ViewGroup.addView(ViewGroup.java:4410)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:279)
at android.support.v7.app.AppCompatDialog.setContentView(AppCompatDialog.java:88)
at petrov.kristiyan.colorpicker.CustomDialog.onCreate(CustomDialog.java:20)
at android.app.Dialog.dispatchOnCreate(Dialog.java:759)
at android.app.Dialog.show(Dialog.java:486)
at petrov.kristiyan.colorpicker.ColorPicker.show(ColorPicker.java:225)
at com.example.mobiware.ivaapp.Activities.AddCategory$1.onClick(AddCategory.java:40)
at android.view.View.performClick(View.java:6207)
at android.widget.TextView.performClick(TextView.java:11094)
at android.view.View$PerformClick.run(View.java:23639)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6688)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
代码
public class fragment_category extends Fragment {
private SQLiteHandler db;
Spinner categoriesspinner;
ColorPicker colorPicker;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View RootView = inflater.inflate(R.layout.fragment_addcategory, container, false);
db = new SQLiteHandler(getApplicationContext());
categoriesspinner = (Spinner) RootView.findViewById(R.id.spinnercategory);
colorPicker = new ColorPicker(getActivity());
Button color = (Button) RootView.findViewById(R.id.color);
color.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
colorPicker.show();
}
});
return RootView;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getActivity().setTitle("Adicionar categoria");
colorPicker.setOnChooseColorListener(new ColorPicker.OnChooseColorListener() {
@Override
public void onChooseColor(int position, int color) {
Log.d("color:", String.valueOf(color));
Log.d("color:", String.valueOf(position));
}
@Override
public void onCancel(){
}
});
loadCategoriesSpinner();
}
public void loadCategoriesSpinner() {
db = new SQLiteHandler(getApplicationContext());
List<String> categories = db.getAllCategory();
ArrayAdapter<String> dataAdapterCategories = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item, categories);
dataAdapterCategories.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
categoriesspinner.setAdapter(dataAdapterCategories);
}
}
公共类片段\u类别扩展片段{
私有SQLiteHandler数据库;
纺纱机;
采色器采色器;
@可空
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u addcategory,container,false);
db=新的SQLiteHandler(getApplicationContext());
categoriesspinner=(微调器)RootView.findViewById(R.id.spinnercategory);
colorPicker=新的colorPicker(getActivity());
按钮颜色=(按钮)RootView.findviewbyd(R.id.color);
color.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
colorPicker.show();
}
});
返回RootView;
}
@凌驾
已创建视图上的公共void(视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
getActivity().setTitle(“Adicionar categoria”);
colorPicker.setOnChooseColorListener(新的colorPicker.OnChooseColorListener(){
@凌驾
公共void onChooseColor(int位置,int颜色){
Log.d(“颜色:”,String.valueOf(颜色));
Log.d(“颜色:”,String.valueOf(位置));
}
@凌驾
公开作废{
}
});
LoadCategoriesPinner();
}
public void LoadCategoriesPinner(){
db=新的SQLiteHandler(getApplicationContext());
列表类别=db.getAllCategory();
ArrayAdapter dataAdapterCategories=新的ArrayAdapter(getApplicationContext(),android.R.layout.simple\u微调器\u项,类别);
dataAdapterCategories.setDropDownViewResource(android.R.layout.simple\u spinner\u dropdown\u项目);
categoriesPinner.setAdapter(dataAdapterCategories);
}
}
我在这里发布之前搜索过,但无法以任何方式修复此错误。
谢谢。是否可能(每次单击时)多次调用
show()
,而颜色选择器不支持此功能
如果这是问题所在,您可以声明为每次单击创建一个新的颜色选择器。例如:
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View RootView = inflater.inflate(R.layout.fragment_addcategory, container, false);
db = new SQLiteHandler(getApplicationContext());
categoriesspinner = (Spinner) RootView.findViewById(R.id.spinnercategory);
Button color = (Button) RootView.findViewById(R.id.color);
color.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
colorPicker = new ColorPicker(getActivity());
colorPicker.show();
}
});
return RootView;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getActivity().setTitle("Adicionar categoria");
if (colorPicker != null) {
colorPicker.setOnChooseColorListener(new ColorPicker.OnChooseColorListener() {
@Override
public void onChooseColor(int position, int color) {
Log.d("color:", String.valueOf(color));
Log.d("color:", String.valueOf(position));
}
@Override
public void onCancel() {
}
});
}
loadCategoriesSpinner();
}