2014-07-01 17 views
22

Tôi có phương thức sendData() trong đoạn của mình. Phương thức này bắt đầu một Hoạt động mới. Tôi muốn gọi phương thức này từ số ArrayAdapter của mình.Gọi phương thức Phân đoạn từ Bộ điều hợp

Đây là mã của tôi: -

HomeFragment.java

stagAdaper = new StaggeredAdapter(myContext, android.R.layout.simple_list_item_1, getList); 
      mGridView.setAdapter(stagAdaper); 
    private void sendData(int position) 
    { 

     myDialog = new ProgressDialog(myContext).show(getActivity(), "Fetching news..", "Just a moment"); 

     myDialog.getWindow().setContentView(R.layout.openarticlewaitprogress); 
     myDialog.getWindow().setTitle("Loading.."); 
     myDialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
     new NewsDetails(myDialog); 



      Intent nIntent = new Intent(getActivity(),Details.class); 

       String Body=getList.get(position).getBody(); 

      newsIntent.putExtra("Body", Body); 


      startActivity(nIntent); 

    } 

StaggeredAdapter.java

viewHolder.layGridLayout.setOnClickListener(new View.OnClickListener() 
    { 

     @Override 
     public void onClick(View v) 
     { 
      // TODO Auto-generated method stub 
      //viewHolder.layGridLayout.setForeground(R.drawable.foreground_selector); 

     } 
    }); 
    return convertView; 
    } 

Làm thế nào tôi có thể làm điều đó?

+0

nhìn này và bạn sẽ tìm hiểu làm thế nào để giao tiếp Fragments: http://stackoverflow.com/questions/24081101/using-localbroadcastmanager-to-communicate-from-fragment-to-activity/24083101#24083101 –

Trả lời

94

Giải pháp 1: Biến bộ điều hợp thành lớp bên trong của đoạn của bạn, để bạn có thể gọi trực tiếp phương thức.

Giải pháp 2: Cập nhật trình tạo bộ điều hợp của bạn để chấp nhận Phân đoạn dưới dạng thông số.

Cái gì như:

customAdapter = new CustomAdapter(myContext, android.R.layout.simple_list_item_1, getList, HomeFragment.this); 

và cập nhật các nhà xây dựng của bộ kết nối:

public CustomAdapter(Context context, int id, HomeFragment fragment) { 
    this.fragment = fragment; 
} 

sau đó bạn gọi các phương thức sử dụng biến mảnh.

fragment.doSomething(); 
+0

tôi đã thử điều này. Nhưng sau đó tôi nhận được một NullPointerException tại biến ProgressDialog – user3713706

+0

Vâng, sau đó giải quyết con trỏ null. Bạn có thể cho chúng tôi biết dòng chính xác nơi NPE xuất hiện không. –

+0

@ user3713706 giải pháp này phải được làm việc, đăng logcat của bạn, có thể bạn có lỗi ở một số nơi khác –

-2

Bạn có thể làm sendData phương pháp như tĩnh

public static void sendData(int position) 
{ 
    ...... 
} 

n gọi nó như

@Override 
public void onClick(View v) 
{ 
    // TODO Auto-generated method stub 
    HomeFragment.sendData(position) 
    ........  
} 
+0

Nếu tôi làm điều đó tôi không thể truy cập getActivity() – user3713706

+0

bạn có thể sử dụng ** myContext ** để thay thế – qulfille

1

Tôi biết đó là muộn để trả lời nhưng có 2 cách hơn để làm điều đó:

  1. Bạn cũng có thể gửi broadcast từ adapter và đăng ký nó trong fragment.

  2. Sử dụng giao diện. Tham khảo this SO câu hỏi để biết chi tiết.

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