Java - 将数据从活动传递到片段

时间:2017-07-11 07:40:10

标签: java android android-fragments android-activity android-fragmentactivity

我只是在学习片段。我接着回答了从片段创建一个接口,根据按钮点击将数据传递回我的活动,它完美地运行。

我无法弄清楚如何让我的片段在创建所有内容之后监听我的活动中的特定更改,就像我的活动是如何做的那样。

基本上我的活动中有一个按钮,片段中有另一个按钮。当我点击活动中的按钮时,我想发送一些数据,以便我的片段知道更改片段按钮的文本。

这是我目前的片段

public void onClickBtn1(View v) {
    passData("abc");
}   

public interface OnDataPass {
    void onDataPass(String data);
}

OnDataPass dataPasser;

@Override
public void onAttach(Context a) {
    super.onAttach(a);
    dataPasser = (OnDataPass) a;
}

public void passData(String data) {
    dataPasser.onDataPass(data);
}

然后在我的活动中

@Override
public void onDataPass(String data) {
    //do something with data
}

我想以某种方式获得完全相同的东西但是翻转失败。有什么建议?谢谢!

3 个答案:

答案 0 :(得分:2)

你应该这样做

public class MainFragment extends Fragment implements MainActivity.OnDataPassedListener {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_main, container, false);
    }

    @Override
    public void onDataPassed(String text) {
        Log.d("text",text);
    }
}

并在您的活动中

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MainFragment mainFragment = new MainFragment();
        mainFragment.onDataPassed("xx");
    }

    public interface OnDataPassedListener {
        void onDataPassed(String text);
    }
}

答案 1 :(得分:0)

  

基本上你可以通过两种方式使用Bundle或使用Interface来实现这一点尽我所知使用接口是将数据从活动传递到片段的更好方法   follow this question its already answered

答案 2 :(得分:0)

尝试通过id获取片段中相同的活动实例: -

Button actBtn = (Button) getActivity().findViewById(R.id.activityButton);

然后使用setText()或getText()等操作。

<强>更新 如果你想从Fragment访问(函数或数据(arraylist))到MainActivity(任何活动),你必须使用活动的实例:

MainActivity mainActivity = (MainActivity) getActivity();

然后像mainActivity.performOperation()一样调用任何方法。