2014-07-01 150 views
22

我在片段中有一个方法sendData()。此方法启动一个新的活动。我想从我的ArrayAdapter中调用此方法。从适配器调用片段方法

这里是我的代码: -

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

我该怎么办呢?

+0

看看这个,你学会如何沟通片段: http://stackoverflow.com/questions/24081101/using-localbroadcastmanager-to-communicate-from-fragment-to-activity/24083101#24083101 –

回答

94

解决方案1: 使适配器成为片段的内部类,以便您可以直接调用该方法。

解决方案2: 更新您的适配器构造函数以接受Fragment作为参数。

喜欢的东西:

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

和更新适配器的构造:

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

然后调用使用片段变量的方法。

fragment.doSomething(); 
+0

我试过这个。但是,然后我在ProgressDialog变量 – user3713706

+0

上得到一个NullPointerException,然后解析那个空指针。你能告诉我们NPE出现的确切路线吗? –

+0

@ user3713706这个解决方案必须工作,发布你的logcat,也许你在其他地方有一个错误 –

-2

您可以SendData方法为静态

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

N通话它作为

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

如果我这样做,我无法访问getActivity() – user3713706

+0

您可以使用** myContext **,而不是 – qulfille

1

我知道它的晚来回答,但有2种方法更做到这一点:

  1. 您也可以发送broadcastadapter注册于fragment

  2. 使用界面。有关详细信息,请参阅this SO问题。