2015-10-02 16 views
5

Khi đường dây EditText trong tiêu điểm tăng giao diện người dùng, số DatePickerFragment sẽ khởi chạy để người dùng nhập ngày.Làm cách nào tôi có thể xử lý thay đổi Định hướng để Fragment không tải?

Khi thay đổi hướng, nếu dòng EditText có tiêu điểm và ngày đã nhập trước đó (để length() > 0), tôi không muốn phân đoạn tự động hiển thị.

Có cách nào để sửa đổi hoặc thêm mã để nếu Hoạt động mới được tạo và dòng EditText đã tập trung, nó sẽ không tự động khởi chạy DatePickerFragment?

Bạn nên làm điều gì đó trong onResume()?

Hoặc làm điều gì đó với savedInstanceState()!=null?

public class Activity extends AppCompatActivity { 
... 
EditText.setOnFocusChangeListener(new OnFocusChangeListener() { 
@Override 
public void onFocusChange(View v, boolean hasFocus) { 
... 
    if (hasFocus && (EditText.getText().length() == 0)) { 
     DatePickerFragment newFragment = new DatePickerFragment(); 
     newFragment.show(getSupportFragmentManager(), "datePicker"); 
    } 
    else if (hasFocus && (EditText.getText().length() > 0)) { 
     ... 
     DatePickerFragment newFragment = new DatePickerFragment(); 
     newFragment.show(getSupportFragmentManager(), "datePicker"); 
    } 
} 
}); 
} 

Trả lời

4

Bạn có sử dụng viewPager hoặc chỉ thêm phân đoạn vào hoạt động của mình? Một cách là để lưu dữ liệu mà bạn muốn duy trì trên luân chuyển vào onSaveInstanceState(Bundle outState) bó và sau đó khôi phục dữ liệu bên trong onCreate sử dụng

if(savedInstanceState != null) { 
    //get your data 
} 

hoặc chỉ cần thêm đoạn của bạn chỉ khi hoạt động đã được nạp (không được nạp lại sau khi luân chuyển thiết bị)

if(savedInstanceState == null) 
{ 
    mFragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); 

    YourFragment fragment = new YourFragment(); 

    fragmentTransaction.add(R.id.fragment_container, fragment); 
    fragmentTransaction.commit(); 
} 

Dù sao bạn chắc chắn nên kiểm tra thisthis nhiệm vụ, chúng có thể hữu ích.

+0

Xin chào, chỉ cần thêm phân đoạn vào hoạt động. Tôi sẽ chỉnh sửa ở trên để hiển thị Hoạt động. – AJW

+0

Ok, vì vậy tôi đang sử dụng DatePickerDialog để hiển thị (getSupportFragmentManager) thực hiện các thao tác phân mảnh. Dòng "if (savedInstanceState == null)" cũng có thể được hiểu là không thêm phân đoạn khi savedInstanceSate không phải là null, điều này đúng sau khi xoay thiết bị? – AJW

+0

có, ngay cả khi bạn không lưu bất kỳ dữ liệu nào vào gói outState, savedInstenceState sẽ không bị rỗng nếu xoay thiết bị là trường hợp –

3

Nếu tôi là bạn, thay vì sử dụng OnFocusChangeListener tôi sẽ sử dụng OnClickListener để hiển thị đoạn bất cứ khi nào EditText được nhấp và làm cho EditText không thể tập trung được.

Để thay đổi hướng, bạn cần lưu ý rằng bạn có thể ngăn thay đổi cấu hình có hiệu lực đối với hoạt động bằng cách thêm android:configChanges="orientation" trên tệp kê khai vào hoạt động liên quan. Không chắc chắn nếu điều này giúp trong trường hợp của bạn mặc dù, nhưng bạn có thể xem.

+0

thêm android: configChanges = "orientation" là tốt để ngăn hoạt động khởi động lại. nhưng nó sẽ không hoạt động nếu bạn chỉ cần ngăn chặn phân đoạn từ tái tạo, không phải toàn bộ hoạt động –

+0

Cảm ơn ghi chú của bạn. Nhưng một số người dùng sẽ có một bàn phím, nơi họ có thể sử dụng phím tab thay vì một mouseclick trên EditText. Nếu tôi không tập trung thì người dùng sẽ không thể di chuyển tiêu điểm vào EditText bằng cách sử dụng phím tab của họ. – AJW

+0

Tôi quên đề cập rằng Hoạt động của tôi cũng có mã OnClickListener, như bạn đã đề xuất. Cảm ơn! – AJW

Các vấn đề liên quan