简体   繁体   中英

Pass data from fragment to viewpager

I have Fragment and want send data to Viewpager. I tried to use Bundle but when don't work.

NewRadioFragment --pass data--> ViewPagerActivity ( fragment PlayRadio and fragment BlogContent )

NewRadioFragment have some data and i want send to PlayRadio and from Playradio send continue to BlogContent.

If you know solution. Pls help me ! Thanks all.

And My code here :

public class NewRadioFragment extends Fragment

 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 extends FragmentActivity

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.viewpager_main_activity);
        setUpView();
    }

public class PlayBlog extends Fragment

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

UPDATE CODE

I edit my code but NullPoiterException public class ViewPagerActivity extends 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();
    } 

And public class PlayBlog extends Fragment

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

Update 2

Logcat Error

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)

To Pass data from NewRadioFragment to PlayBlog you first need to send Bundle to ViewPagerActivity using putExtras then call setArguments for PlayBlog method where you are calling add or replcase method for showing PlayBlog fragment in ViewPagerActivity Activity.

On btnShowMore Button click send Bundle in Intent:

Intent intent = new Intent(mContext,
                            ViewPagerActivity.class);
Bundle bundle = new Bundle();
bundle.putString(Constant.STRING_KEY, Desciption);  
intent.putExtras(bundle);
startActivity(intent);

In ViewPagerActivity get Bundle using getIntent and call setArguments method to send bundle to fragment :

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.viewpager_main_activity);
    Intent intent=getIntent();
    Bundle bundle = intent.getExtras();

Now pass bundle Bundle to PlayBlog Fragment

You have to use interface to send datas to its container

Exemple here (last reply) : Passing data between a fragment and its container activity

Edit : i need more code to send you good example and understand why your fragment start your pager

in NewRadioFragment declare an interface like this

// Container Activity must implement this interface
public interface Onpassdata // name not fixed 
{
    public void start(String T, int ID);
}

declare a member : 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();
            }
        }
    });

in pour 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

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM