2011-11-26 31 views
127

Tôi có một Activity với 3 EditText s và chế độ xem tùy chỉnh hoạt động với bàn phím chuyên dụng để thêm thông tin vào EditText giây.Android lưu trữ Hoạt động từ chế độ xem

Hiện tại tôi đang chuyển số Activity vào chế độ xem để tôi có thể lấy văn bản chỉnh sửa hiện được tập trung và cập nhật nội dung từ bàn phím tùy chỉnh.

Có cách nào để tham chiếu hoạt động gốc và tập trung hiện tại EditText mà không chuyển hoạt động vào chế độ xem không?

+5

Câu trả lời đúng là gomino. – djunod

Trả lời

152

phương pháp sau đây có thể giúp bạn

  1. Activity host = (Activity) view.getContext(); và
  2. view.isFocused()
+25

Đừng quên rằng 'getContext()' có thể không phải lúc nào cũng trả về đối tượng Activity nếu View của bạn không được gọi từ ngữ cảnh Activity. Đảm bảo lên kế hoạch trước và cung cấp dự phòng phù hợp. –

+1

@WordPressDeveloper - Làm cách nào để tạo một chế độ xem mà không có hoạt động? Bạn có nghĩa là xem từ xa? Có các trường hợp lượt xem khác được tạo bên ngoài Hoạt động không? –

+1

@kilaka Widgets, Fragments, RemoteViews, LayoutInflaters là tất cả các trường hợp mà bạn có thể tạo chế độ xem không liên quan đến Hoạt động. –

195

Tôi chỉ kéo rằng mã nguồn từ MediaRouter trong official support library và cho đến nay nó hoạt động tốt:

private Activity getActivity() { 
    Context context = getContext(); 
    while (context instanceof ContextWrapper) { 
     if (context instanceof Activity) { 
      return (Activity)context; 
     } 
     context = ((ContextWrapper)context).getBaseContext(); 
    } 
    return null; 
} 
+5

trong khi? tại sao trong khi? –

+2

Nó chỉ là một cách để bong bóng lên máng tất cả các bối cảnh cơ sở, cho đến khi hoạt động được tìm thấy, hoặc thoát khỏi vòng lặp khi bối cảnh gốc được tìm thấy.Nguyên nhân bối cảnh gốc sẽ có một baseContext rỗng, dẫn đến kết thúc vòng lặp. – Gomino

+10

Đây là cách tốt hơn để làm điều đó. Nó phải được đánh dấu là câu trả lời. – shadox

0

Trong Android 7+ quan điểm không có quyền truy cập vào các kèm theo hoạt động nữa, vì vậy, không thể truyền view.getContext() vào Hoạt động nữa.

Thay vào đó, các mã dưới đây làm việc trong Android 7+ và 6:

private static Activity getActivity(final View view) { 
    return (Activity) view.findViewById(android.R.id.content).getContext(); 
} 
1

tôi mất Gomino 's answer và sửa đổi nó để phù hợp với hoàn hảo trong myUtils.java vì vậy tôi có thể sử dụng nó bất cứ nơi nào và bất cứ khi nào tôi cần . Hy vọng ai đó thấy hữu ích :)

abstract class myUtils { 
    public static Activity getActivity(View view) { 
     Context context = view.getContext(); 
     while (context instanceof ContextWrapper) { 
      if (context instanceof Activity) { 
       return (Activity)context; 
      } 
      context = ((ContextWrapper)context).getBaseContext(); 
     } 
     return null; 
    } 
} 
Các vấn đề liên quan