通过监听器从活动发送数据到片段
问题描述:
我有一个活动,其中有一个ViewPager,在这个ViewPager中有一些片段。当屏幕上显示数据时,我需要发送数据。所以我想在活动中实现一个将数据发送到片段的接口。通过监听器从活动发送数据到片段
public interface SetDataToFragment {
void getData(List<FinanceOperationModel> aModels);
}
public class FinanceMonitoringActivity extends ApiActivity2 implements FinanceMonitoringView
, FinanceMonitoringFragment.SaveDataInterface {
private SetDataToFragment mInterface;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_finance_monitoring);
ButterKnife.bind(this);
mInterface= (SetDataToFragment) this;
...
然后有一个错误:
Caused by: java.lang.ClassCastException: com.akbars.bankok.screens.financeMonitoring.FinanceMonitoringActivity cannot be cast to com.akbars.bankok.screens.financeMonitoring.SetDataToFragment
如何正确启动界面中的活性片段使用数据?
答
在您的活动中创建一个接口,并通过接口将您的数据传递给片段。在片段中实现该接口以获取数据。
例如
MainActivity.class
public class MainActivity extends AppCompatActivity {
DataFromActivityToFragment dataFromActivityToFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentA fr = new FragmentA();
FragmentManager fm = getFragmentManager();
dataFromActivityToFragment = (DataFromActivityToFragment) fr;
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.replace(R.id.fragment_place, fr);
fragmentTransaction.commit();
final Handler handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
dataFromActivityToFragment.sendData("Hi");
}
};
handler.postDelayed(r, 5000);
}
public interface DataFromActivityToFragment {
void sendData(String data);
}
}
FragmentA.class
public class FragmentA extends Fragment implements MainActivity.DataFromActivityToFragment {
TextView text;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.content_main, null);
text = (TextView) rootView.findViewById(R.id.fragment_text);
return rootView;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public void sendData(String data) {
if(data != null)
text.setText(data);
}
}
答
活动FinanceMonitoringActivity
没有实现SetDataToFragment
,所以你不能把它转换为SetDataToFragment
在FinanceMonitoringActivity
答
如果你想将数据发送到你可以做到这一点从viewPager适配器类或者如果你想从活动做落实活动的接口并调用该视图寻呼机片段实现SetDataToFragment
从片段中返回所需的数据。
FinanceMonitoringActivity没有实现SetDataToFragment – Pehlaj