从Fragment获取数据时的活动状态

时间:2017-01-10 16:24:13

标签: android android-fragments android-activity

我使用定义方法的接口将一些数据从片段返回到活动:

@Override
public void passDataToActivity(String someValue, RecentTransAdapter recentTransAdapter) {
    dateSelected = someValue;
    monthButton.setText(dateSelected);
    mAdapter = recentTransAdapter;
}

活动的生命周期是什么状态,活动会收到这些数据吗?

passDataToActivity()在片段onCreateView()内被调用。

我得到的适配器,我想在Switch的setOnCheckedChangeListener()

中使用它
aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

        Log.d("2^^list is ",String.valueOf(mAdapter.getItemCount()));

        if (!isChecked) {
            Log.d("notchecked","yo");
            mAdapter.getFilter().filter("");
        } else {
            mAdapter.getFilter().filter("credit");
        }
        recyclerView.setAdapter(mAdapter);
    }
});

目前这个侦听器代码在活动的onCreate()中,但是我不需要从片段获取适配器。

那么在哪个状态下需要定义这个监听器来获取所需的适配器?

2 个答案:

答案 0 :(得分:0)

定义类似的界面,

1. item 1
2. item 2

```
Code block
```

{:start="3"}
3. item 3

在您的活动中实施此功能

interface PassDataToActivity{
    void passDataToActivity(String someValue, RecentTransAdapter recentTransAdapter);
}

在你的片段中,你必须定义初始化接口实例并获得回调的方法

public class ActivitySample extends Activity implements PassDataToActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        FragmentDemo fragment = FragmentDemo.newInstance();
        fragment.setPassDataToActivityListener(this);
    }

    @Override
    public void passDataToActivity(String someValue, RecentTransAdapter recentTransAdapter) {
        //Write code here...
        dateSelected = someValue;
        monthButton.setText(dateSelected);
        mAdapter = recentTransAdapter;
    }
}   

现在,您可以通过调用方法

将结果传递给您的活动
public class FragmentDemo extends Fragment {

    PassDataToActivity mPassDataToActivity;

    public void setPassDataToActivityListener(PassDataToActivity passDataToActivity){
        mPassDataToActivity = passDataToActivity;
    }
}

在你的情况下,我认为你应该在mPassDataToActivity.passDataToActivity(someValue,mAdapter); 喜欢,

结束时通过
onCheckedChanged()

希望它对你有所帮助。

答案 1 :(得分:0)

当你的Activity实现一个将被Fragment调用的回调监听器时(类似于@Jaymin在他的回答中解释的那样,你的活动被视为实现回调的Java对象实例)界面。

  

<强> TL; DR

回调与Activity生命周期无关。 Activity可以处于其生命周期的任何步骤,并且只会像任何其他Java对象一样接收回调。

  

<强>解释

因此Activity生命周期状态与它提供的回调的实现无关。可以随时调用回调,并触发Activity的实现。如果您使用Fragment.onCreateView()方法调用它,则会在onResume的{​​{1}}之前调用它,如下所示

Activity

如果您从01-10 13:27:01.549 4847-4847/com.c.fragmentlifecycle D/MainActivity: onCreate: called 01-10 13:27:01.678 4847-4847/com.c.fragmentlifecycle D/MainFragment: onCreateView: called 01-10 13:27:01.681 4847-4847/com.c.fragmentlifecycle D/MainActivity: onCallback: called by fragment 01-10 13:27:01.688 4847-4847/com.c.fragmentlifecycle D/MainActivity: onResume: called 01-10 13:27:01.688 4847-4847/com.c.fragmentlifecycle D/MainFragment: onResume: called 的{​​{1}}拨打回叫,则会在onResume()的{​​{1}}之后致电,如下所示

Fragment

希望这有帮助。