I know this is a duplicate question but i am not able to find the correct on for me I am trying to send some data from my OrderMadeFragment to OrderTakenFragment but I am not able to
here are my classes
OrderMadeFragment
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
/**
* on 12/22/2015.
*/
public class OrderMadeFragment extends Fragment
{
SharedPreferences sh_pref;
SharedPreferences.Editor toEdit;
Button b;
EditText e;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment_order_made, container, false);
sh_pref=getContext().getSharedPreferences("start", getContext().MODE_PRIVATE);
toEdit = sh_pref.edit();
b=(Button)rootView.findViewById(R.id.button);
e=(EditText)rootView.findViewById(R.id.editText);
b.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
String qv=e.getText().toString();
OrderTakenFragment ldf = new OrderTakenFragment();
Bundle args = new Bundle();
args.putString("YourKey", qv);
ldf.setArguments(args);
Log.e("args", args.toString());
//Inflate the fragment
getFragmentManager().beginTransaction().add(R.id.container, ldf).commit();
}
});
return rootView;
}
}
OrderTakenFragment
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
/**
* Created by on 12/22/2015.
*/
public class OrderTakenFragment extends Fragment
{
TextView v;
String bn="abc";
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment_order_taken, container, false);
v=(TextView)rootView.findViewById(R.id.textView);
// String value = getArguments().getString("YourKey");
// Log.e("YourKey",value);
v.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
bn = getArguments().getString("YourKey");
Toast.makeText(getActivity(),bn,Toast.LENGTH_LONG).show();
}
});
return rootView;
}
}
Logcat Error
12-23 11:17:11.811 10669-10669/com.example.qualwebs.test E/args: Bundle[{YourKey=Name}]
12-23 11:17:16.212 10669-10669/com.example.qualwebs.test E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.qualwebs.test, PID: 10669
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
at com.example.qualwebs.test.OrderTakenFragment$1.onClick(OrderTakenFragment.java:31)
at android.view.View.performClick(View.java:4785)
at android.view.View$PerformClick.run(View.java:19884)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:702)
I followed How to send data from one Fragment to another Fragment? link
You should request for arguments in onCreate() of your OrderTakenFragment
String value;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(getArguments()!=null)
value = getArguments().getString("YourKey");
}
Then in your onCreateView(), under your onClick()
v.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
// Use the variable value in your toast
if(value!=null)
Toast.makeText(getActivity(),value,Toast.LENGTH_LONG).show();
}
});
Make sure your textview v has:
android:clickable="true"
In your fragment OrderMadeFragment` :
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
Better still create a function in your containing activity:
public void replaceFragment(Fragment fragment) {
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.TheID, fragment);
fragmentTransaction.commit();
}
Then from the fragment use:
((ContainingActivity) getActivity()).replaceFragment(fragment);
This way you can manage your back stack and control your app navigation.
You need to manage your fragment args.
static final String YOUR_KEY = "YourKey";
private String key_;
public OrderTakenFragment() {
// Required empty public constructor
}
public static OrderTakenFragment newInstance(String key_) {
OrderTakenFragment fragment = new OrderTakenFragment();
Bundle args = new Bundle();
args.putString(YOUR_KEY, key_);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
key_ = getArguments().getString(YOUR_KEY);
}
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment_order_taken, container, false);
v=(TextView)rootView.findViewById(R.id.textView);
v.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if(key_!=null)
Toast.makeText(getActivity(),key_,Toast.LENGTH_LONG).show();
}
});
return rootView;
}
U have to get data coming from fragment in a bundle like this :
Bundle bundle = this.getArguments();
bn = bundle.getString("YourKey", "abc");
I would like to write these post as Answer.
First of all i think you want replace some OrderMadeFragment
with OrderTakenFragment
on same activity.
Try to change this line:
getFragmentManager().beginTransaction().add(R.id.container, ldf).commit();
To: getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.container, ldf).commit();
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.