gpt4 book ai didi

java - 当一个布局中具有相同 ID 的更多组件时,旋转后出现错误值

转载 作者:搜寻专家 更新时间:2023-11-01 09:07:45 25 4
gpt4 key购买 nike

我创建了一个可删除的 EditText。这是布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" >

<EditText
android:id="@+id/cacEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:paddingRight="35dp" />

<Button
android:id="@+id/cacClearButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginLeft="20dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:background="@android:drawable/ic_input_delete"
android:visibility="invisible" />

</RelativeLayout>

问题是,当我将更多这些放入一个布局并旋转到横向时,它们突然都具有相同的值。我想这是因为系统按 ID 恢复值,并且每个组件由相同 ID 的元素组成。我该如何解决这个问题?

更多信息:

布局中的可删除EditText (cz.kns.uome.component.CleanAndClearEditText)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/cz.kns.uome"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<ScrollView
android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="5dp" >

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >

<cz.kns.uome.component.CleanAndClearEditText
android:id="@+id/nameEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/contactPickerButton"
app:hint="@string/person_name"
app:type="textPersonName" />

<ImageButton
android:id="@+id/contactPickerButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:contentDescription="@string/select_contact"
android:src="@drawable/ic_action_dropdown" />
</RelativeLayout>

<cz.kns.uome.component.CleanAndClearEditText
android:id="@+id/emailEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
app:hint="@string/person_email_opt"
app:type="textEmailAddress" />

<cz.kns.uome.component.CleanAndClearEditText
android:id="@+id/descriptionEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
app:hint="@string/description_opt"
app:type="text" />

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >

<Button
android:id="@+id/saveButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="5"
android:text="@string/save" />

<Button
android:id="@+id/cancelButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="@string/cancel" />
</LinearLayout>
</LinearLayout>
</ScrollView>

</LinearLayout>

Java 类

public class CleanAndClearEditText extends RelativeLayout {

private final EditText editText;
private final Button clearButton;

public CleanAndClearEditText(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.clean_and_clear_edit_text, this);

TypedArray typedArray = getContext().obtainStyledAttributes(attrs,
R.styleable.ClearAndCleanEditText);

// ?????
// I have to somehow access that edittext here but static id does not work
editText = (EditText) findViewById(R.id.cacEditText);
editText.addTextChangedListener(textWatcher);
editText.setHint(typedArray.getString(R.styleable.ClearAndCleanEditText_hint));

String type = typedArray.getString(R.styleable.ClearAndCleanEditText_type);
if (type != null) {
editText.setInputType(InputTypes.get(type));
}

clearButton = (Button) findViewById(R.id.cacClearButton);
clearButton.setOnClickListener(clearButtonListener);
}
// rest ommited
}

Normal state Rotated

最佳答案

我正在处理这个问题,我能够通过删除布局中包含自定义 View 的所有 View 来“解决”这个问题,实现这个:

public void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
// retain your data in the bundle then remove views
layout.removeAllViewsInLayout();
}

因此您可以在 onCreate 方法中从包中取回数据。

关于java - 当一个布局中具有相同 ID 的更多组件时,旋转后出现错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10664577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com