今天我嘗試構建我的第一個自己的Android應用程序。從mainActivity調用android片段中的方法
我想得到一個顯示片段的主要活動(在我的情況下,它被稱爲「eingabeFragment」)。這個片段包含一個editText和一個按鈕。只要按下按鈕,我希望「eingabeFragment」消失,並顯示一個新的「anzeigeFragment」。
到目前爲止一切正常。現在我想要在「eingabeFragment」中輸入的文本顯示在我的「anzeigefragment」中。
我試圖用活動實現的「eingabefragment」中的一個接口來管理它。
只要按下按鈕,mainactivity就會通過調用我的getText方法來從「eingabeFragment」中獲取文本。
爲了調試目的,我添加了一個System.out.println來測試我的程序。 所以我知道,這部分工作正常。
現在我想我只需要添加這個字符串到我的「anzeigeFragment」的textview。不幸的是,輸出是「未找到碎片」,這意味着當我在「anzeigenFragment」中調用我的「setInfo」方法時,我會得到一個Nullpointer。
我的問題是如何在片段替換舊片段後訪問片段中的公共方法。
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);
}
}
任何解釋可以理解