【发布时间】:2016-11-27 16:46:47
【问题描述】:
今天我尝试构建自己的第一个 Android 应用。
我想获得一个显示片段的主要活动(在我的例子中,它被称为“eingabeFragment”)。该片段包含一个editText 和一个按钮。按下按钮后,我希望“eingabeFragment”消失并显示一个新的“anzeigeFragment”。
到目前为止一切正常。现在我希望在“eingabeFragment”中输入的文本显示在我的“anzeigefragment”中。
我尝试使用活动实现的“eingabefragment”中的接口来管理它。
按下按钮后,mainactivity 通过调用我的 getText 方法从“eingabeFragment”中获取文本。
出于调试目的,我添加了一个 System.out.println 来测试我的程序。 所以我知道,这部分工作正常。
现在我想我只需要将这个字符串添加到我的“anzeigeFragment”中的文本视图中。不幸的是,输出是“Fragment not found”,这意味着当我在“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);
}
}
任何解释将不胜感激
【问题讨论】:
标签: java android android-studio fragment