2012-06-12 67 views
6

Tôi có activity với hai fragments. Tôi không sử dụng <fragment/> thẻ, tôi có hai lớp học kéo dài Fragment, trong đoạn đó, tôi có:Bộ phận thu phát và phát sóng

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.bfragment, container, false); // this will inflate the Fragment in activity. 
    } 

Bây giờ vấn đề là, tôi nhận được một số máy thu phát sóng vào các hoạt động từ mà một số người nhận cập nhật giao diện người dùng từ đoạn đầu tiên và một số cập nhật giao diện người dùng từ thứ 2.

Một trong những máy thu phát sóng của tôi theo quy định tại acitivity chính của tôi là:

private BroadcastReceiver bcReceived = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context arg0, Intent intent) { 
      Log.d("", "BC Object Received"); 

      ActionBar actionbar = getActionBar(); 
      actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
      ActionBar.Tab bTab = actionbar.newTab().setText("B"); 
      Fragment fragment = new BFragment(); 
      bTab.setTabListener(new MyTabsListener(fragment)); 
      actionbar.addTab(bTab, true); 

      final LinearLayout linearLayout = (LinearLayout) findViewById(R.id.bTable); // Getting null pointer exception here. linearLayout is not getting initialized. 

Tôi muốn sử dụng LinearLayout trên và sử dụng nó để thổi phồng một cái nhìn vào nó. Nhưng nhận được NPE.

ở đây, khi một số người phát sóng cập nhật đoạn đầu tiên, nó hoạt động đúng, nhưng khi người nhận phát sóng cập nhật đoạn thứ 2 từ hoạt động, tôi nhận được NPE.

Câu hỏi của tôi là: Tôi nên cập nhật đoạn này ở đâu và ở đâu? Nó có nên ở bên trong hoạt động của tôi không? nếu có thì phương pháp nào? nếu không thì tôi nên cập nhật đoạn nào?

Xin hãy giúp tôi !!!

+0

Bố cục (R.layout.bfragment) giống nhau cho hai đoạn? R.id.bTable có tồn tại ở cả hai đoạn hay không? –

+0

nếu bạn hỏi xem cả hai bố cục có giống nhau không. Nhưng cả hai bố cục đều được tăng cao trong cùng một vùng chứa bằng cách thay thế bố cục trước đó. – Shrikant

+0

R.id.bTable là vùng chứa của bạn phải không? –

Trả lời

25

Logic hoạt động của bạn phải được tách biệt khỏi logic phân đoạn của bạn.

hoạt động của bạn có nghĩa vụ phải xử lý logic như:

tôi cần phải hiển thị đoạn này thay vì rằng một

Nhưng hoạt động của bạn là không phải xử lý loại logic :

Tôi cần cập nhật nội dung bên trong đoạn

Đó là trách nhiệm của đoạn để cập nhật nội dung của nó. Mặt khác, hoạt động có thể cho biết đoạn mà nó cần cập nhật.

Với ý nghĩ đó, mảnh vỡ của bạn nên tiếp xúc với các phương pháp như

updateContent(With Blabla) 

HOẶC

updateContent() 

Trong hoạt động của bạn, khi BroadcastReceiver nhận một cái gì đó bạn nên:

  • Kiểm tra mà đoạn hiện được hiển thị
  • Chuẩn bị nội dung cập nhật trong đoạn
  • Yêu cầu phân đoạn cập nhật bằng phương pháp updateContent(With Blabla).

HOẶC

  • Kiểm tra mà đoạn hiện được hiển thị
  • Hỏi đoạn để cập nhật chính nó với phương pháp updateContent().

Chọn phương pháp đơn giản nhất theo logic nghiệp vụ ứng dụng của bạn.

+0

Cảm ơn câu trả lời của bạn Timothée Jeannin. Hãy để tôi thực hiện nó theo cách này. – Shrikant

+0

Không sao, bạn có thể tự hỏi nếu bạn cần thêm giải thích. Chúc may mắn với dự án của bạn. :) –

+0

Cảm ơn bạn rất nhiều. – Shrikant

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