2014-07-01 17 views
22

Mam w moim fragmencie metodę sendData(). Ta metoda rozpoczyna nową aktywność. Chcę nazwać tę metodę z mojego ArrayAdapter.Wywołanie metody fragmentacji z adaptera

Oto mój kod: -

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; 
    } 

Jak mogę to zrobić?

+0

wyglądać to i nauczyć się komunikować Fragments: http://stackoverflow.com/questions/24081101/using-localbroadcastmanager-to-communicate-from-fragment-to-activity/24083101#24083101 –

Odpowiedz

94

Rozwiązanie 1: Ustaw adapter jako wewnętrzną klasę fragmentu, aby można było wywołać metodę bezpośrednio.

Rozwiązanie 2: Zaktualizuj konstruktor adaptera, aby zaakceptować Fragment jako parametr.

Coś jak:

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

i zaktualizować konstruktor Adapter:

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

następnie wywołać metody z wykorzystaniem fragment zmienny.

fragment.doSomething(); 
+0

I próbowałem tego. Ale potem pojawia się wyjątek NullPointerException w zmiennej ProgressDialog – user3713706

+0

Cóż, następnie rozwiąż ten wskaźnik zerowy. Czy możesz nam podać dokładną linię, w której pojawia się NPE. –

+0

@ user3713706 to rozwiązanie musi być przetworzone, opublikuj swój logcat, może masz błąd w niektórych miejscach, gdzie indziej –

-2

Można dokonać metodę sendData jak statyczny

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

n nazywamy go jako

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

Jeśli to zrobię, nie mogę uzyskać dostępu do getActivity() – user3713706

+0

możesz użyć ** myContext ** zamiast – qulfille

1

Wiem, że jest późno, aby odpowiedzieć, ale Istnieją 2 sposoby do zrobienia go:

  1. Możesz także wysłać broadcast z adapter i zarejestrować go w fragment.

  2. Użyj interfejsu. Aby uzyskać szczegółowe informacje, patrz pytanie this SO.