Сегодня я попытался создать свое собственное собственное приложение для Android.вызов метода в андроидном фрагменте из mainActivity
Я хотел получить основную деятельность, которая показывает фрагмент (в моем случае это называется «eingabeFragment»). Этот фрагмент содержит editText и кнопку. Как только кнопка нажата, я хочу, чтобы «eingabeFragment» исчез и появился новый «anzeigeFragment».
Все работает нормально. Теперь я хочу, чтобы текст, введенный в «eingabeFragment», отображался в моем «anzeigefragment».
Я попытался управлять этим с помощью интерфейса в «eingabefragment», который реализуется в результате действия.
Как только кнопка нажата, mainactivity извлекает текст из «eingabeFragment», вызывая метод getText.
Для целей отладки я добавил System.out.println для проверки моей программы. Знаю, что эта часть работает нормально.
Теперь я думал, что мне просто нужно добавить эту строку в текстовое изображение в моем «anzeigeFragment». К сожалению, выход «Fragment not found», что означает, что я получаю Nullpointer, когда я вызываю свой метод setInfo в своем «anzeigenFragment».
Мой вопрос заключается в том, как получить доступ к общедоступным методам во фрагменте из активности после того, как этот фрагмент заменил старый фрагмент.
AnzeigeFragment
package local.mydomain.versuch;
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.TextView;
public class AnzeigeFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_anzeige, container, false);
}
public void setInfo(String text)
{
TextView az = (TextView) getView().findViewById(R.id.output);
az.setText(text);
}
}
EingabeFragment
package local.mydomain.versuch;
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.EditText;
public class EingabeFragment extends Fragment {
public static String MESSAGE = "local.mydomain.versuch.MESSAGE";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_eingabe, container, false);
}
public interface Clicked{
public void pressed(View view);
}
public String getInfo()
{
EditText et = (EditText) getView().findViewById(R.id.eingabe);
String result = et.getText().toString();
return result;
}
}
и, наконец, MainActivity
package local.mydomain.versuch;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends FragmentActivity implements EingabeFragment.Clicked{
public static String MESSAGE = "local.mydomain.versuch.MESSAGE";
private EingabeFragment eingabeFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(findViewById(R.id.fragment_container)!=null)
{
if (savedInstanceState != null)
{
return;
}
}
eingabeFragment = new EingabeFragment();
getSupportFragmentManager().beginTransaction().
add(R.id.fragment_container,eingabeFragment, "Eingabe").commit();
}
@Override
public void pressed(View view) {
EingabeFragment ef = (EingabeFragment) getSupportFragmentManager().findFragmentByTag("Eingabe");
String info = ef.getInfo();
System.out.println(info);
AnzeigeFragment anzeigeFragment = new AnzeigeFragment();
FragmentTransaction transaction= getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, anzeigeFragment, "AnzeigeFrag");
transaction.addToBackStack(null);
transaction.commit();
AnzeigeFragment az = (AnzeigeFragment) getSupportFragmentManager().findFragmentByTag("AnzeigeFrag");
if (az==null)
{
System.out.println("Fragment not found");
}
else
{
System.out.println("Everything ok");
az.setInfo(info);
}
System.out.println(info);
}
}
Любое объяснение будет оценено