从mainActivity

时间:2016-11-27 16:46:48

标签: java android android-studio fragment

今天我尝试构建我自己的第一款Android应用。

我想得到一个显示片段的主要活动(在我的例子中,它被称为“eingabeFragment”)。该片段包含editText和按钮。按下按钮后,我希望“eingabeFragment”消失,并显示一个新的“anzeigeFragment”。

到目前为止一切正常。现在我希望在“ezeabeFragment”中输入的文本显示在我的“anzeigefragment”中。

我试图通过活动实现的“eingabefragment”中的界面来管理它。

按下按钮后,mainactivity通过调用我的getText方法从“eingabeFragment”中获取文本。

出于调试目的,我添加了一个System.out.println来测试我的程序。 所以我知道,这部分工作正常。

现在我想我只需要将这个字符串添加到我的“anzeigeFragment”中的textview中。不幸的是输出是“Fragment not found”,这意味着当我在“anzeigenFragment”中调用我的“setInfo”方法时,我得到了一个N​​ullpointer。

我的问题是在此片段替换旧片段后如何从活动中访问片段中的公共方法。

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);
}
}

任何解释将不胜感激

1 个答案:

答案 0 :(得分:0)

您可以通过包

在两个片段之间传达消息

更新您的代码

  

AnzeigeFragment anzeigeFragment = new AnzeigeFragment();

Bundle data=new Bundle()
Data.putStringExtra("messagekey","message value");

anzeigeFragment.setArguments(data);
> FragmentTransaction transaction=
> getSupportFragmentManager().beginTransaction();
> transaction.replace(R.id.fragment_container, anzeigeFragment,
> "AnzeigeFrag"); transaction.addToBackStack(null);

进一步在第二个片段中您可以通过调用片段的 getArgument()方法来检索此数据。

然后是getStringExtra(“messagekey”)方法。