2014-07-01 17 views
22

Parçada sendData() yöntemim var. Bu yöntem yeni bir Aktivite başlatır. Bu yöntemi benim ArrayAdapter'dan aramak istiyorum.10 Bir Bağdaştırıcıdan bir Fragment yöntemini çağırın.

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

Bunu nasıl yapabilirim -: Burada

benim kodudur?

+0

bakış, bu ve Fragments iletişim öğrenmek: http://stackoverflow.com/questions/24081101/using-localbroadcastmanager-to-communicate-from-fragment-to-activity/24083101#24083101 –

cevap

94

Çözüm 1: Bağdaştırıcıyı parçanızın bir iç sınıfı yapın, böylece yöntemi doğrudan çağırabilirsiniz.

Çözüm 2: Bağdaştırıcıyı parametre olarak kabul etmek için bağdaştırıcı yapıcınızı güncelleyin. gibi

şey:

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

ve güncellemek Adaptörü yapıcısı:

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

o zaman parçası değişkeni kullanılarak yöntemleri çağırmak.

fragment.doSomething(); 
+0

ben bunu denedi. Ama sonra ProgressDialog değişken – user3713706

+0

iyi bir NullPointerException olsun, sonra bu boş gösterici çözüm. NPE'nin ortaya çıktığı kesin çizgiyi söyler misiniz? –

+0

@ user3713706 Bu çözüm işe yaramalı, logcat'ınızı post etmeli, belki de başka bir yerde bir hata var. –

-2

Sen statik

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

n bunu cevaplamak için geç olduğunu biliyorum ama bunu yapmak için 2 yol daha vardır

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

Bunu yaparsam getActivity() – user3713706

+0

'a erişemiyorum, yerine ** myContext ** kullanabilirsiniz – qulfille

1

olarak onu aramak gibi SendData yöntemini yapabilirsiniz:

  1. broadcast'u adapter'dan gönderebilir ve fragment numaralı telefondan kaydedebilirsiniz.

  2. Arabirimi kullan. Detaylar için this SO sorusuna bakın.

İlgili konular