2012-11-09 69 views
16

Tôi có các đoạn cho 3 trạng thái của màn hình; Thêm, chỉnh sửa và xem. Trong Thêm Tôi tạo một thực thể và lưu nó. Lần sau tôi mở nó trong Chế độ xem và thiết lập tên đơn vị sử dụngEditText Settext không hoạt động với Fragment

EditText entityName = (EditText) view.findViewById(R.id.entityName);  
entityName.setText(entity.getEntityname()); 

tôi bấm vào nút chỉnh sửa từ Chế độ xem để mở chế độ Edit. Tôi thay đổi tên thực thể ở đây và lưu nó. Điều này đưa tôi trở lại màn hình xem. Nhưng tôi thấy tên thực thể không được cập nhật. Tôi gỡ lỗi và thấy rằng entity.getEntityname() có giá trị chính xác. Tôi không chắc tại sao văn bản chỉnh sửa lại không có giá trị mới.

Bất kỳ ý tưởng nào?

Lưu ý: Tôi đang sử dụng Android phiên bản 2.2

+0

Những mảnh vỡ yêu cầu API Level 11 hoặc lớn –

+1

@AndroidApple Tôi nghĩ rằng nó an toàn để giả định ông đang sử dụng các thư viện tương thích -_- nên hes không sai khi làm như vậy lmao – Andy

+0

Có Tôi đang sử dụng thư viện Tương thích. –

Trả lời

69

Các EditText dường như có một vấn đề với cài đặt lại văn bản trong onCreateView. Vì vậy, giải pháp ở đây là đặt lại văn bản trong onResume. Những công việc này.

Ngoài ra còn có sự cố trong onActivityCreated. Tôi đặt lại nội dung của edittext trong onStart và nó hoạt động. [tín dụng cho @savepopulation]

+3

Tôi chỉ gặp sự cố này và nhận thấy rằng nó cũng sẽ hoạt động nếu được gọi là onStart. Điều đáng chú ý là sử dụng một thứ TextView làm việc như mong đợi nhưng một khi bạn bắt đầu sử dụng EditText hoặc AutoCompleteTextView, bạn bắt đầu chạy vào các vấn đề này. – Jona

+1

Nó làm việc cảm ơn bạn rất nhiều. bạn có thể giải thích tại sao loại vấn đề này xảy ra –

+1

Nếu gọi 'setText' từ' OnActivityCreated' cũng không hoạt động. Cảm ơn nhiều. Dành thời gian cho vấn đề đó. – skywall

3

Ngoài ra còn có sự cố trong onActivityCreated. Tôi đặt lại nội dung của edittext trong onStart và nó hoạt động.

2

Theo @TusharVengrulekar, đây là cách bạn phải implent Fragment bạn

public class ActionBar extends Fragment { 

private TextView lbl_title; 
private String title; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment_action_bar, container, false); 
    title = "Contacts"; 
    lbl_title = (TextView) view.findViewById(R.id.lbl_title); 

    return view; 
} 

@Override 
public void onStart(){ 
    super.onStart(); 

    lbl_title.setText(title); 
} 

@Override 
public void onResume(){ 
    super.onResume(); 
} 
} 
+0

Đây là cách phổ biến của tôi để có được ActionBar từ một phụ huynh ViewController –

5

Như đã đề cập trước đó, EditText dường như có một vấn đề với cài đặt lại văn bản trong onCreateView.

Điều này là do một khi phân đoạn được tạo, cho đến khi chúng tôi xóa nó khỏi hậu trường, phương thức onResume của nó sẽ được gọi là chế độ xem không được tạo lại.

Vì vậy, giải pháp ở đây là đặt lại văn bản trong onResume. Điều này sẽ hoạt động trên mọi thời điểm ngay cả khi bạn khóa và mở khóa màn hình ur trong khi đoạn đó mở hoặc bạn đang quay trở lại từ một đoạn khác

Tuy nhiên, nếu bạn đang thiết lập dữ liệu này từ gói thì tốt hơn là nên lưu giá trị đó trong một trường hợp biến gây ra các gói có thể đến null amd u có thể gett null con trỏ vấn đề sau đó

1

Có một số lớp Xem trong Android nên lưu trạng thái của chúng khi vùng chứa của chúng được tách ra. Fragment.onViewCreated() nên được gọi trước khi View.onSaveInstanceState(). Vì vậy, nếu bạn đặt một giá trị trong phương thức Fragment.onViewCreated(). Giá trị phải được xóa trong phương thức View.onRestoreInstanceState (trạng thái Parcelable).

Ví dụ, lớp TextView, RecyclerView và do đó on.You có thể đọc các quy tắc ứng TextView.java:

public Parcelable onSaveInstanceState() { 
    Parcelable superState = super.onSaveInstanceState(); 

    // Save state if we are forced to 
    final boolean freezesText = getFreezesText(); 
    boolean hasSelection = false; 
    int start = -1; 
    int end = -1; 
    .... 
    if (freezesText || hasSelection) { 
     SavedState ss = new SavedState(superState); 
     .... 
    } 
    .... 
    } 

Có để params để kiểm soát xem để cứu nhà nước: "freezesText" và "hasSelection ". Không thể chọn Chế độ xem văn bản, do đó, chọn Lựa chọn là sai. Hàm getFreezesText(), trả về false trong lớp TextView. Vì vậy, TextView sẽ không lưu trạng thái. mã của EditText.java:

@Override 
    public boolean getFreezesText() { 
    return true; 
    } 

EditText trả về true, vì vậy EditText sẽ lưu trạng thái.

Có một số phương pháp để sửa chữa lỗi này:

1.implement EditText.getFreezesText() và trả về false, và rõ ràng tình trạng chọn trong EditText

2.implement onSaveInstanceState của EditText , trở null.like này:

public Parcelable onSaveInstanceState() { 
     super.onSaveInstanceState(); 
    return null; 
} 

3.sử dụng EditText.setSaveEnable (sai);

4.add param trong xml "saveEnable = 'false'"

+0

Dude, bạn đã cứu mạng tôi! –

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