Tôi đã viết Chế độ xem tùy chỉnh và tôi muốn cập nhật một số chế độ xem khác sau khi tương tác với chế độ xem tùy chỉnh của mình.Android findViewById() trong Chế độ xem tùy chỉnh
chính Layout:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/display_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="text"
android:layout_centerHorizontal="true"
android:tag="name"
android:ems="10" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:id="@+id/id_number"
android:layout_centerHorizontal="true"
android:layout_below="@id/display_name"/>
<ge.altasoft.custom_views.IdNumber
android:id="@+id/custom_id_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@id/id_number"
android:paddingLeft="35dip"
custom:firstName="@id/display_name"/>
</RelativeLayout>
Custom View Layout:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<EditText
android:id="@+id/id_number_custom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:paddingRight="35dip" />
<ImageButton
android:id="@+id/load_data_button"
android:layout_width="30dip"
android:layout_height="30dip"
android:layout_centerVertical="true"
android:src="@drawable/load_data"
android:layout_toRightOf="@id/id_number_custom" />
</RelativeLayout>
Custom View Class, nhà xây dựng và người nghe:
private int firstNameViewID;
public IdNumber (Context context, AttributeSet attrs) {
super(context, attrs);
initViews();
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.IdNumber);
final int N = a.getIndexCount();
for(int i = 0; i < N; i++){
int attr = a.getIndex(i);
switch(attr){
case R.styleable.IdNumber_firstName:
firstNameViewID = a.getResourceId(attr, -1);
break;
}
}
a.recycle();
}
private void initViews() {
inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.id_number_edit_text_custom, this, true);
editText = (EditText) findViewById(R.id.id_number_custom);
loadButton = (ImageButton) findViewById(R.id.load_data_button);
loadButton.setVisibility(RelativeLayout.INVISIBLE);
loadData();
}
private void loadData(){
loadButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
EditText firstName = (EditText) findViewById(R.id.display_name);
firstName.setText("Some Text");
}
});
}
Vấn đề là EditText firstName = (EditText) findViewById(R.id.display_name);
trả về giá trị rỗng. Tôi biết rằng chỉ cần gọi findViewById()
sẽ tìm kiếm chế độ xem trong bố cục mà tôi đã thổi phồng nó.
Nếu có thể, làm thế nào tôi có thể xem được EditText với id: display_name từ bố cục chính?
Cảm ơn trước.
không, tôi không muốn nhận chế độ xem tùy chỉnh của mình, tôi muốn có chế độ xem khác từ mainLayout, với id diplay_name. – Jilberta
bạn đang tăng cấp xml nhưng không lưu trữ chế độ xem được trả lại. bạn có thể tìm thấy bằng id trên chế độ xem đó. – Siddhesh