public class FragActivity1 extends Fragment implements View.OnClickListener {
View view;
ImageButton name_change__btn, status_change_btn, profile_change_btn;
ImageView person_dp;
TextView status_field , name_field;
.
.
.
.some code here
I've this class containing changeName method which is changing text of a textview . name_field is written as:
name_field=(TextView)view.findViewById(R.id.name_field);
Now I'm calling this method from a popup button where i'm passing some string value at runtime.
I'm getting nullpointer exception.
public void changeName(String s)
{
Log.d("changename entry" ,"changename netry");
System.out.println(s);
System.out.println(name_field.getText().toString());
name_field.setText(s);
System.out.println(name_field.getText());
}
Here is the code of popup class:
public class Name_Status extends AppCompatActivity implements View.OnClickListener {
EditText name_change;
RelativeLayout name_status_edit_field;
String name;
Button cancel_name_change , ok_name_change;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.name_status);
DisplayMetrics dm=new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width=dm.widthPixels;
int height=dm.heightPixels;
getWindow().setLayout((int)(width*.8),(int)(height*.3));
name_change=(EditText)findViewById(R.id.change_name);
name_status_edit_field= (RelativeLayout)findViewById(R.id.name_status_edit_field);
cancel_name_change=(Button)findViewById(R.id.cancel_change_name);
ok_name_change=(Button)findViewById(R.id.ok_change_name);
ok_name_change.setOnClickListener(this);
name_change.setOnClickListener(this);
name_status_edit_field.clearFocus();
name_change.setFocusable(true);
//name_change.update();
}
@Override
public void onClick(View v) {
if(v.getId()==R.id.ok_change_name)
{
name=name_change.getText().toString();
System.out.println(name);
Log.d("entered","entred");
FragActivity1 obj=new FragActivity1();
Log.d("obj created", "obj created");
obj.changeName(name);
Log.d("obj.changename","obj.changename");
Intent intent=new Intent();
Log.d("intenthsjjsjs","intent hxjjx");
intent.setClass(Name_Status.this , MainActivity.class);
startActivity(intent);
}
}
}
I even searched and found that fragments can't communicate directly with other fragment or activity. But couldn't understand well. And this popup is a new activity other than the one containing my fragment. So how to communicate between fragment and other activity?
Hope I could explain my problem well. Please try to explain in layman language.
You should use LocalBroadcastManager To commuicate between two Activities The concept is simple and can be implemented easily check below link
https://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwiT89LA4rbOAhXLso8KHexGAkwQFggdMAA&url=https%3A%2F%2Fdeveloper.android.com%2Freference%2Fandroid%2Fsupport%2Fv4%2Fcontent%2FLocalBroadcastManager.html&usg=AFQjCNGameWXe05OE9ufTkz6rzSydOw91g
Communication between fragments and the activity they are attached to is explained here. From the fragment to the activity you simply use
getActivity
for a reference to the activity. From the activity to the fragment you can use thefindFragmentById(R.id.fragment_id)
method of theFragmentManager
for a reference to the fragment you want to communicate with.Communication between activities is realized through
Intent
s and their Extras as described here. You basically put your Data in aBundle
and insert it in theÌntent
withputExtras()
.In your case you should first have the fragment communicate with its activity and then start a new activity with a
Bundle
from here.I suggest you to use EventBus for communicating between fragments and activities https://github.com/greenrobot/EventBus