我有一个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布局中的按钮(带有不同的布局)?或者有没有办法将片段之间的数据传递给另一个活动?
谢谢!
答案 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;
}