0

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)
Iris Louis
  • 297
  • 6
  • 19

2 Answers2

1

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

ρяσѕρєя K
  • 132,198
  • 53
  • 198
  • 213
1

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

}

Community
  • 1
  • 1
Phil
  • 47
  • 1
  • 10
  • in func btnShowMore.setOnClickListener i don't call start(Description) ? – Iris Louis Feb 06 '15 at 06:35
  • I have edited because i déclare two parameters in my interface but you can pass one or more parameters. Just adapt the interface and the function – Phil Feb 06 '15 at 06:43
  • Ok I test but give me Exception must implement Onpassdata. In ViewPagerActivity i implement Onpassdata – Iris Louis Feb 06 '15 at 06:48
  • Can you send the interface déclaration too – Phil Feb 06 '15 at 07:04
  • Work if i implement in class MainMenu (class config Navigation Drawer). But ViewPagerAcvity in start(String T) i show Log("TAG", T) not have data – Iris Louis Feb 06 '15 at 07:05
  • You start NewRadioFragment in MainMenu ? – Phil Feb 06 '15 at 07:09
  • Yes. Fragment NewRadio get Data from service and i want pass data to another fragments – Iris Louis Feb 06 '15 at 07:11
  • I think its why you have no data in ViewPagerAcvity - Your MainMenu start ViewPagerAcvity ,and ViewPagerAcvity start fragments. – Phil Feb 06 '15 at 07:13
  • MainMenu start NewRadioFragment, NewRadioFragment start ViewPagerActivity, ViewPagerActivity has two fragment ( PlayRadio and BlogContent ) – Iris Louis Feb 06 '15 at 07:18
  • Let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/70365/discussion-between-phil-and-iris-louis). – Phil Feb 06 '15 at 07:27