Before explaining, I will show you my (shorted) code:
public class MainActivity extends AppCompatActivity
{
FrameLayout simpleFrameLayout;
TabLayout tabLayout;
SecondFragment s = new SecondFragment();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
simpleFrameLayout = (FrameLayout) findViewById(R.id.simpleFrameLayout);
tabLayout = (TabLayout) findViewById(R.id.simpleTabLayout);
// Create a new Tab named "First"
TabLayout.Tab firstTab = tabLayout.newTab();
firstTab.setText("First"); // set the Text for the first Tab
// first tab
tabLayout.addTab(firstTab); // add the tab at in the TabLayout
// Create a new Tab named "Second"
TabLayout.Tab secondTab = tabLayout.newTab();
secondTab.setText("Second"); // set the Text for the second Tab
tabLayout.addTab(secondTab); // add the tab in the TabLayout
Fragment fragment = null;
fragment = new FirstFragment();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.simpleFrameLayout, fragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
// get the current selected tab's position and replace the fragment accordingly
Fragment fragment = null;
switch (tab.getPosition()) {
case 0:
fragment = new FirstFragment();
myMenu.findItem(R.id.telefono).setVisible(false);
break;
case 1:
fragment = s;
myMenu.findItem(R.id.telefono).setVisible(true);
break;
}
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.simpleFrameLayout, fragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
public void conectar(String nombre, String ip, int puerto) {
//Code...
Executor executor = Executors.newSingleThreadExecutor();
executor.execute(new Runnable() {
@Override
public void run() {
Looper.prepare();
runOnUiThread(new Runnable() {
@Override
public void run() {
try{
//Code...
try {
//Code
TabLayout.Tab tab = tabLayout.getTabAt(1);
tab.select();
s.roomText(param1);
}
catch(SocketTimeoutException ex)
{
}
}
catch(Exception e){
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
String stacktrace = sw.toString();
// create an email intent to send to yourself
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("plain/text");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { "lets.think.android@gmail.com" });
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "App Error Report");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, stacktrace);
// start the email activity - note you need to start it with a chooser
startActivity(Intent.createChooser(emailIntent, "Send error report..."));
}
}
});
}
});
}
}
SecondFragment:
package com.mycompany.myapp;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
public class SecondFragment extends Fragment
{
EditText chat, room;
public SecondFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_second, container, false);
room = (EditText) view.findViewById(R.id.mainEditText1);
chat = (EditText) view.findViewById(R.id.chatEditText1);
return view;
}
public void roomText(String t){
room.setText(t);
}
}
I am trying to set the text of an editText of a fragment from the MainActivity. For that I wrote a method in SecondFragment that should change the text of that editText. And this method is called in the MainActivity.
Why is the "room" object null if the tab was selected beforehand and the elements of SecondFragment should actually already be created? I do not understand that.
I already road this: What is a NullPointerException, and how do I fix it?
But it doesn't help me.
I've seen that many users are voting minus points without reason. So I hope this question is acceptable.