如何在FragmentActivity中使用片段中的按钮?

时间:2014-08-20 12:40:22

标签: android android-fragments

我有一个FragmentActivity和2个片段来创建一个ViewPager,我想打开一个不同的Activity并在点击第一个Fragment上的按钮时将数据传递给Activity,但由于Fragment不是一个我不能使用的活动这个:

Intent intent  = new Intent(this, PickAppLine.class);
                    intent.putExtra("key", MyData);
                    startActivity(intent);

所以我想我可以在FragmentActivity上做到这一点,但是当我使用Fragment的布局中的按钮时会得到nullpointerexception,那么有没有办法可以使用FragmentActivity上的Frgament布局中的按钮(带有不同的布局)?或者有没有办法将片段之间的数据传递给另一个活动?

谢谢!

2 个答案:

答案 0 :(得分:1)

进入此链接

http://developer.android.com/training/basics/fragments/communicating.html

简短的方法:

public class MainActivity extends fragmentActivity{
   ....

   public void performClick(){
    ....
   }

}


public MyFragment extends Fragment{
  ...
  public void onClick(View v) {
    if (v.getId() == button.getId()){
       ((MainActivity)getActivity()).performClick();
    }
  }

}

单击片段中的按钮时,在MainActivity中调用performClick()函数。

答案 1 :(得分:0)

使用LocalBroadcastManager。

单击按钮时,在片段中执行以下操作。

Intent intent = new Intent( "button_pressed_action" );
LocalBroadcastManager.getInstance( getActivity() ).sendBroadcast( intent );

在您的活动中,您需要注册一个广播接收器来接收它。

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive( Context ctxt, Intent intent ) {
         if ( intent.getAction().equals("button_pressed_action") {
               // Handle the button press as you wish.
         }
    }
}

然后在您的活动的onCreate或onCreateView方法中注册接收器。最好将Receiver创建为全局变量,以便在onDestroy上取消注册。

private MyReceiver mReceiver;

@Override
public View onCreateView( LayoutInflater inflater, ViewGroup group, Bundle bundle ) {
    View v = inflater.inflate(R.layout.mm_map_frag, group, false);
    mReceiver = new MyReceiver();
    LocalBroadcastManager.getInstance(this).registerReceiver( mReceiver, new IntentFilter("button_pressed_action");
    return v;
}

确保在适当的时间取消注册接收器。通常在activity的onDestroy方法中。

@Override
    public void onDestroy() {
        super.onDestroy();
        // when its destroyed we may need to go through and unregister all of the enabled receivers.
        LocalBroadcastManager.getInstance( getActivity() ).unregisterReceiver(mReceiver);
        mReceiver = null;

    }