将数据从片段传递到 viewpager
Pass data from fragment to viewpager
我有 Fragment 并想将数据发送到 Viewpager。我尝试使用 Bundle,但当不起作用时。
NewRadioFragment --pass data--> ViewPagerActivity(片段 PlayRadio 和片段 BlogContent)
NewRadioFragment 有一些数据,我想发送到 PlayRadio,然后从 Playradio 继续发送到 BlogContent。
如果你知道解决办法。请帮助我 !
谢谢大家
还有我的代码:
public class NewRadioFragment 扩展片段
btnShowMore.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (item.getLink_play() != null) {
Toast.makeText(mContext, item.getLink_play(),
Toast.LENGTH_SHORT).show();
Intent intent = new Intent(mContext,
ViewPagerActivity.class);
Bundle bundle = new Bundle();
bundle.putString(Constant.STRING_KEY, Desciption);
intent.putExtras(bundle);
startActivity(intent);
} else {
Toast.makeText(mContext, "NULL", Toast.LENGTH_SHORT).show();
}
}
});
ViewPagerActivity 扩展了 FragmentActivity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager_main_activity);
setUpView();
}
public class PlayBlog 扩展片段
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.playradio_layout, container,
false);
mContext = container.getContext();
final Animation anim = AnimationUtils.loadAnimation(mContext,
R.anim.rotate);
Desciption = getArguments().getString(Constant.STRING_KEY);
Log.i("", Constant.TAG + Desciption);
ImageView splash = (ImageView) rootView.findViewById(R.id.base);
TextView tvDesciption = (TextView) rootView
.findViewById(R.id.tv_Marquee);
tvDesciption.setText(Desciption);
splash.startAnimation(anim);
return rootView;
}
更新代码
我编辑了我的代码但是 NullPoiterException
public class ViewPagerActivity 扩展了 FragmentActivity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager_main_activity);
Intent intent = getIntent();
Bundle args = intent.getExtras();
Fragment playRadio = new PlayBlog();
playRadio.setArguments(args);
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction.replace(R.id.pager, playRadio);
transaction.commit();
setUpView();
}
和public class PlayBlog 扩展片段
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.playradio_layout, container,
false);
mContext = container.getContext();
final Animation anim = AnimationUtils.loadAnimation(mContext,
R.anim.rotate);
Desciption = getArguments().getString(Constant.STRING_KEY);
Log.i("", Constant.TAG + Desciption);
ImageView splash = (ImageView) rootView.findViewById(R.id.base);
TextView tvDesciption = (TextView) rootView
.findViewById(R.id.tv_Marquee);
tvDesciption.setText(Desciption);
splash.startAnimation(anim);
return rootView;
}
更新 2
Logcat错误
02-06 06:14:39.980: E/AndroidRuntime(1790): FATAL EXCEPTION: main
02-06 06:14:39.980: E/AndroidRuntime(1790): java.lang.NullPointerException
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.tadev.blogradio.main.PlayBlog.onCreateView(PlayBlog.java:36)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.View.measure(View.java:15518)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:681)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.View.measure(View.java:15518)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.View.measure(View.java:15518)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.widget.LinearLayout.measureVertical(LinearLayout.java:847)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.View.measure(View.java:15518)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
02-06 06:14:39.980: E/AndroidRuntime(1790): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2176)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.View.measure(View.java:15518)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.Choreographer.doCallbacks(Choreographer.java:562)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.Choreographer.doFrame(Choreographer.java:532)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.os.Handler.handleCallback(Handler.java:725)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.os.Handler.dispatchMessage(Handler.java:92)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.os.Looper.loop(Looper.java:137)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.app.ActivityThread.main(ActivityThread.java:5041)
02-06 06:14:39.980: E/AndroidRuntime(1790): at java.lang.reflect.Method.invokeNative(Native Method)
02-06 06:14:39.980: E/AndroidRuntime(1790): at java.lang.reflect.Method.invoke(Method.java:511)
02-06 06:14:39.980: E/AndroidRuntime(1790): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-06 06:14:39.980: E/AndroidRuntime(1790): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-06 06:14:39.980: E/AndroidRuntime(1790): at dalvik.system.NativeStart.main(Native Method)
要将数据从 NewRadioFragment
传递到 PlayBlog
,您首先需要使用 putExtras
将 Bundle 发送到 ViewPagerActivity
,然后为 [=13= 调用 setArguments
] 方法,您在其中调用 add or replcase
方法以在 ViewPagerActivity
Activity.
中显示 PlayBlog
片段
在 btnShowMore
按钮上单击发送 Intent 中的捆绑包:
Intent intent = new Intent(mContext,
ViewPagerActivity.class);
Bundle bundle = new Bundle();
bundle.putString(Constant.STRING_KEY, Desciption);
intent.putExtras(bundle);
startActivity(intent);
在 ViewPagerActivity
中使用 getIntent
获取 Bundle 并调用 setArguments
方法将 bundle 发送到片段:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager_main_activity);
Intent intent=getIntent();
Bundle bundle = intent.getExtras();
现在将 bundle
Bundle 传递给 PlayBlog
Fragment
你必须使用接口将数据发送到它的容器
这里举例(最后回复):
Passing data between a fragment and its container activity
编辑:我需要更多代码来向您发送好的示例并理解为什么您的片段会启动寻呼机
在 NewRadioFragment 中声明这样的接口
// Container Activity must implement this interface
public interface Onpassdata // name not fixed
{
public void start(String T, int ID);
}
声明一个成员:private Onpassdata mCallback;
@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (Onpassdata) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement Onpassdata");
}
}
btnShowMore.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (item.getLink_play() != null) {
Toast.makeText(mContext, item.getLink_play(),
Toast.LENGTH_SHORT).show();
start(Desciption, id);
} else {
Toast.makeText(mContext, "NULL", Toast.LENGTH_SHORT).show();
}
}
});
在ViewPagerActivity中注入
public ViewPagerActivity extends FragmentActivity
implements NewRadioFragment.Onpassdata
{
public void start(String T, int ID) {
// do something whith values
// and you can Start your BlogContent fragment here
}
我有 Fragment 并想将数据发送到 Viewpager。我尝试使用 Bundle,但当不起作用时。
NewRadioFragment --pass data--> ViewPagerActivity(片段 PlayRadio 和片段 BlogContent)
NewRadioFragment 有一些数据,我想发送到 PlayRadio,然后从 Playradio 继续发送到 BlogContent。
如果你知道解决办法。请帮助我 ! 谢谢大家
还有我的代码:
public class NewRadioFragment 扩展片段
btnShowMore.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (item.getLink_play() != null) {
Toast.makeText(mContext, item.getLink_play(),
Toast.LENGTH_SHORT).show();
Intent intent = new Intent(mContext,
ViewPagerActivity.class);
Bundle bundle = new Bundle();
bundle.putString(Constant.STRING_KEY, Desciption);
intent.putExtras(bundle);
startActivity(intent);
} else {
Toast.makeText(mContext, "NULL", Toast.LENGTH_SHORT).show();
}
}
});
ViewPagerActivity 扩展了 FragmentActivity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager_main_activity);
setUpView();
}
public class PlayBlog 扩展片段
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.playradio_layout, container,
false);
mContext = container.getContext();
final Animation anim = AnimationUtils.loadAnimation(mContext,
R.anim.rotate);
Desciption = getArguments().getString(Constant.STRING_KEY);
Log.i("", Constant.TAG + Desciption);
ImageView splash = (ImageView) rootView.findViewById(R.id.base);
TextView tvDesciption = (TextView) rootView
.findViewById(R.id.tv_Marquee);
tvDesciption.setText(Desciption);
splash.startAnimation(anim);
return rootView;
}
更新代码
我编辑了我的代码但是 NullPoiterException public class ViewPagerActivity 扩展了 FragmentActivity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager_main_activity);
Intent intent = getIntent();
Bundle args = intent.getExtras();
Fragment playRadio = new PlayBlog();
playRadio.setArguments(args);
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction.replace(R.id.pager, playRadio);
transaction.commit();
setUpView();
}
和public class PlayBlog 扩展片段
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.playradio_layout, container,
false);
mContext = container.getContext();
final Animation anim = AnimationUtils.loadAnimation(mContext,
R.anim.rotate);
Desciption = getArguments().getString(Constant.STRING_KEY);
Log.i("", Constant.TAG + Desciption);
ImageView splash = (ImageView) rootView.findViewById(R.id.base);
TextView tvDesciption = (TextView) rootView
.findViewById(R.id.tv_Marquee);
tvDesciption.setText(Desciption);
splash.startAnimation(anim);
return rootView;
}
更新 2
Logcat错误
02-06 06:14:39.980: E/AndroidRuntime(1790): FATAL EXCEPTION: main
02-06 06:14:39.980: E/AndroidRuntime(1790): java.lang.NullPointerException
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.tadev.blogradio.main.PlayBlog.onCreateView(PlayBlog.java:36)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.View.measure(View.java:15518)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:681)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.View.measure(View.java:15518)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.View.measure(View.java:15518)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.widget.LinearLayout.measureVertical(LinearLayout.java:847)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.View.measure(View.java:15518)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
02-06 06:14:39.980: E/AndroidRuntime(1790): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2176)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.View.measure(View.java:15518)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.Choreographer.doCallbacks(Choreographer.java:562)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.Choreographer.doFrame(Choreographer.java:532)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.os.Handler.handleCallback(Handler.java:725)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.os.Handler.dispatchMessage(Handler.java:92)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.os.Looper.loop(Looper.java:137)
02-06 06:14:39.980: E/AndroidRuntime(1790): at android.app.ActivityThread.main(ActivityThread.java:5041)
02-06 06:14:39.980: E/AndroidRuntime(1790): at java.lang.reflect.Method.invokeNative(Native Method)
02-06 06:14:39.980: E/AndroidRuntime(1790): at java.lang.reflect.Method.invoke(Method.java:511)
02-06 06:14:39.980: E/AndroidRuntime(1790): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-06 06:14:39.980: E/AndroidRuntime(1790): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-06 06:14:39.980: E/AndroidRuntime(1790): at dalvik.system.NativeStart.main(Native Method)
要将数据从 NewRadioFragment
传递到 PlayBlog
,您首先需要使用 putExtras
将 Bundle 发送到 ViewPagerActivity
,然后为 [=13= 调用 setArguments
] 方法,您在其中调用 add or replcase
方法以在 ViewPagerActivity
Activity.
PlayBlog
片段
在 btnShowMore
按钮上单击发送 Intent 中的捆绑包:
Intent intent = new Intent(mContext,
ViewPagerActivity.class);
Bundle bundle = new Bundle();
bundle.putString(Constant.STRING_KEY, Desciption);
intent.putExtras(bundle);
startActivity(intent);
在 ViewPagerActivity
中使用 getIntent
获取 Bundle 并调用 setArguments
方法将 bundle 发送到片段:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager_main_activity);
Intent intent=getIntent();
Bundle bundle = intent.getExtras();
现在将 bundle
Bundle 传递给 PlayBlog
Fragment
你必须使用接口将数据发送到它的容器
这里举例(最后回复): Passing data between a fragment and its container activity
编辑:我需要更多代码来向您发送好的示例并理解为什么您的片段会启动寻呼机
在 NewRadioFragment 中声明这样的接口
// Container Activity must implement this interface
public interface Onpassdata // name not fixed
{
public void start(String T, int ID);
}
声明一个成员:private Onpassdata mCallback;
@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (Onpassdata) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement Onpassdata");
}
}
btnShowMore.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (item.getLink_play() != null) {
Toast.makeText(mContext, item.getLink_play(),
Toast.LENGTH_SHORT).show();
start(Desciption, id);
} else {
Toast.makeText(mContext, "NULL", Toast.LENGTH_SHORT).show();
}
}
});
在ViewPagerActivity中注入
public ViewPagerActivity extends FragmentActivity
implements NewRadioFragment.Onpassdata
{
public void start(String T, int ID) {
// do something whith values
// and you can Start your BlogContent fragment here
}