0
對不起,如果我問一個愚蠢的問題,但到目前爲止還沒有運氣來解決這個問題。我有2個單選按鈕來決定佈局,並使用佈局波紋管組件。這裏是佈局無線電選擇動態子佈局
<?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="fill_parent">
<TextView
android:id="@+id/arrival_date_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/arrival_date_label"/>
<EditText
android:id="@+id/arrival_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/arrival_date_label"
android:hint="10/05/2012"/>
<Spinner
android:id="@+id/arrival_time_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/arrival_date"/>
<TextView
android:id="@+id/return_date_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/return_date_label"
android:layout_below="@id/arrival_time_spinner"/>
<EditText
android:id="@+id/return_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/return_date_label"
android:hint="10/05/2012"/>
<Spinner
android:id="@+id/return_time_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/return_date"/>
</RelativeLayout>
和Java類初始化一些使用
public class ReturnFixedDays extends RelativeLayout {
private EditText arrivalDate;
private Spinner arrivalTime;
private EditText returnDate;
private Spinner returnTime;
private final String pattern = "dd/MM/yyyy";
public ReturnFixedDays(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.return_fixed_days, null);
arrivalDate = (EditText) view.findViewById(R.id.arrival_date);
arrivalDate.setText(arrivalDate());
arrivalTime = (Spinner) view.findViewById(R.id.arrival_time_spinner);
ArrayAdapter adapter = new ArrayAdapter(context, R.array.travel_time_entries,android.R.layout.simple_spinner_item);
arrivalTime.setAdapter(adapter);
returnDate = (EditText) view.findViewById(R.id.return_date);
returnDate.setText(returnDate());
returnTime = (Spinner) view.findViewById(R.id.return_time_spinner);
ArrayAdapter adapter2 = new ArrayAdapter(context, R.array.travel_time_entries,android.R.layout.simple_spinner_item);
returnTime.setAdapter(adapter2);
}
private String arrivalDate(){
return dateToString(today());
}
private String returnDate(){
return dateToString(weekLater());
}
private String dateToString(Date date){
return formatter().format(date);
}
private SimpleDateFormat formatter(){
return new SimpleDateFormat(pattern);
}
private Date weekLater(){
return adjustDateBy(today(), 7);
}
private Date today(){
return Calendar.getInstance().getTime();
}
private Date adjustDateBy(Date currentDate, int numOfDays) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(currentDate);
calendar.add(Calendar.DATE, numOfDays);
return calendar.getTime();
}
}
我們添加到此佈局的組成部分,查看我一樣在XML
<RelativeLayout
android:id="@+id/dates_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/flight_layout">
<TextView
android:id="@+id/date_label"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/dates_label"
style="@style/Label"/>
<RadioGroup
android:id="@+id/dates_radio_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_below="@id/date_label">
<RadioButton
android:id="@+id/flexible_dates_radio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/flexible_dates_label"
style="@style/Label"/>
<RadioButton
android:id="@+id/fixed_dates_radio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/fixed_dates_label"
style="@style/Label"/>
</RadioGroup>
</RelativeLayout>
<RelativeLayout
android:id="@+id/stub_container"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/dates_layout">
<com.flyweekend.android.date.view.ReturnFixedDays
android:id="@+id/return_fixed_days_stub"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout="@layout/return_fixed_days"/>
<com.flyweekend.android.date.view.ReturnFlexibleDays
android:id="@+id/return_flexible_days_stub"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout="@layout/return_flexible_days"/>
</RelativeLayout>
下列之一FlightView.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
context = getActivity();
dateTypeRadioGrp = dateTypeRadioGroup(view);
returnFixedDays = (RelativeLayout) view.findViewById(R.id.return_fixed_days_stub);
updateDatesVisibility();
return view;
}
private RadioGroup dateTypeRadioGroup(View view){
RadioGroup group = (RadioGroup)view.findViewById(R.id.dates_radio_group);
group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup radioGroup, int selected) {
if(selected == R.id.flexible_dates_radio){
Log.i(TAG, "Flexible dates selected");
updateDatesVisibility();
}else{
Log.i(TAG, "Fixed dates selected");
updateDatesVisibility();
}
}
});
return group;
}
private void updateDatesVisibility(){
if(dateTypeRadioGrp.getCheckedRadioButtonId() == R.id.fixed_dates_radio){
returnFixedDays.setVisibility(View.VISIBLE);
} else{
returnFixedDays.setVisibility(View.INVISIBLE);
}
}
但是這兩組都不可見。我想我需要額外的眼睛來發現我要錯誤地動態添加這些佈局。
是的,就是這樣! Well spotted :-) –
@peter_budo此外,如果'R.layout.return_fixed_days'是您發佈的xml佈局(使用根'RelativeLayout'),您可能希望移除該父親'RelativeLayout'並將其替換與一個'merge'標籤。現在,您正在'ReturnFixedDays'(它擴展了** RelativeLayout **)和'R.layout.return_fixed_days'中的視圖之間添加額外的'RelativeLayout'。 – Luksprog
是的,這是下一步,我只需要它開始,然後我可以做一些代碼清理;) –