Je crée une vue personnalisée qui se remplit en fonction d'une condition "Oui" ou "Non", implémentée via RadioButtons & ViewStub. Malheureusement, les choses ne vont pas comme prévu:Vue personnalisée - Vue conditionnelle - ViewStub & RadioButtons
CustomView - artooConditional:
public artooConditional(Context context, AttributeSet attrs) {
super(context, attrs);
setAttributes(attrs);
}
private void setAttributes(AttributeSet attrs) {
TypedArray a = getContext().obtainStyledAttributes(attrs,
R.styleable.artooConditional);
mLayout = a.getResourceId(R.styleable.artooConditional_layout, NO_ID);
LayoutInflater inflater = (LayoutInflater) getContext()
.getSystemService(getContext().LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.types_conditional, null, false);
addView(v, new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
RadioGroup group = (RadioGroup) v
.findViewById(R.id.types_conditional_group);
layout = (ViewStub) v.findViewById(R.id.types_conditional_layout);
group.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == R.id.types_conditional_yes) {
if (!inflated) {
layout.setLayoutResource(mLayout);
layout.inflate();
inflated = true;
}
// layout.setVisibility(View.VISIBLE);
} else {
// if (layout.getVisibility() != View.GONE)
layout.setVisibility(View.GONE);
inflated = false;
}
}
});
a.recycle();
}
Soutenir la mise en page xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:a="http://schemas.android.com/apk/res/com.android.artoo.types.buttondialog"
android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical">
<RadioGroup android:layout_width="fill_parent"
android:layout_height="wrap_content" android:orientation="horizontal" android:id="@+id/types_conditional_group">
<RadioButton android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Yes" android:layout_weight="1" android:id="@+id/types_conditional_yes"/>
<RadioButton android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="No" android:layout_weight="1" android:id="@+id/types_conditional_no"/>
</RadioGroup>
<ViewStub android:layout_width="fill_parent"
android:layout_height="wrap_content" android:id="@+id/types_conditional_layout" android:visibility="gone"/>
</LinearLayout>
LogCat:
08-25 16:14:39.579: ERROR/AndroidRuntime(356): Uncaught handler: thread main exiting due to uncaught exception
08-25 16:14:39.599: ERROR/AndroidRuntime(356): java.lang.IllegalStateException: ViewStub must have a non-null ViewGroup viewParent
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.view.ViewStub.inflate(ViewStub.java:246)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at com.android.artoo.types.buttondialog.artooConditional$1.onCheckedChanged(artooConditional.java:67)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.widget.RadioGroup.setCheckedId(RadioGroup.java:172)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.widget.RadioGroup.access$600(RadioGroup.java:52)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.widget.RadioGroup$CheckedStateTracker.onCheckedChanged(RadioGroup.java:342)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.widget.CompoundButton.setChecked(CompoundButton.java:125)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.widget.CompoundButton.toggle(CompoundButton.java:85)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.widget.RadioButton.toggle(RadioButton.java:69)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.widget.CompoundButton.performClick(CompoundButton.java:97)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.view.View.onTouchEvent(View.java:4133)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.widget.TextView.onTouchEvent(TextView.java:6510)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.view.View.dispatchTouchEvent(View.java:3672)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1712)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1202)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.app.Activity.dispatchTouchEvent(Activity.java:1987)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1696)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.view.ViewRoot.handleMessage(ViewRoot.java:1658)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.os.Handler.dispatchMessage(Handler.java:99)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.os.Looper.loop(Looper.java:123)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at android.app.ActivityThread.main(ActivityThread.java:4203)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at java.lang.reflect.Method.invokeNative(Native Method)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at java.lang.reflect.Method.invoke(Method.java:521)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
08-25 16:14:39.599: ERROR/AndroidRuntime(356): at dalvik.system.NativeStart.main(Native Method)
je peux voir, le premier Lorsque le ViewStub est gonflé, son parent devient nul et provoque donc une erreur lorsque je clique sur "Y es "après avoir cliqué sur" Non ". Quel est le meilleur moyen de créer une telle vue?
Toute aide sera très appréciée. Merci
Sameer
Sameer avez-vous résolu ce problème? pouvez-vous s'il vous plaît me guider un peu à ce sujet? Je suis confronté à une situation similaire. S'il vous plaît aider. –
J'ai un problème similaire posté http://stackoverflow.com/questions/11578653/viewstub-raises-error-while-inflating-more-than-one-layouts-conditionally s'il vous plaît y répondre. –