【问题标题】:Sending data from the Activity to the fragment through the listener通过监听器将数据从 Activity 发送到 Fragment
【发布时间】:2017-04-19 11:08:42
【问题描述】:

我有一个 Activity,其中有一个 ViewPager,在这个 ViewPager 中有一些片段。当它显示在屏幕上时,我需要将数据发送到片段。所以我想在Activity中实现一个接口,将数据发送到fragment。

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;
...

然后出现错误:

原因:java.lang.ClassCastException:com.akbars.bankok.screens.financeMonitoring.FinanceMonitoringActivity 无法转换为 com.akbars.bankok.screens.financeMonitoring.SetDataToFragment

如何在 Activity 中正确启动接口以使用片段中的数据?

【问题讨论】:

  • FinanceMonitoringActivity 没有实现 SetDataToFragment

标签: android android-fragments interface


【解决方案1】:

如果您想将数据发送到视图分页器片段,您可以从 viewPager 适配器类中执行此操作,或者如果您想从活动中执行此操作,请在活动中实现接口并从片段中调用该接口以返回所需的数据。

【讨论】:

    【解决方案2】:

    在您的 Activity 中创建一个接口,并通过该接口将您的数据传递给片段。在您的片段中实现该接口以获取数据。

    例如

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

    【讨论】:

      【解决方案3】:

      活动FinanceMonitoringActivity 没有实现SetDataToFragment,所以你不能将它转换为SetDataToFragment

      FinanceMonitoringActivity 中实现SetDataToFragment

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-27
        • 2018-01-22
        • 2018-04-14
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        相关资源
        最近更新 更多