Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通过侦听器将数据从活动发送到片段_Android_Android Fragments_Interface - Fatal编程技术网

Android 通过侦听器将数据从活动发送到片段

Android 通过侦听器将数据从活动发送到片段,android,android-fragments,interface,Android,Android Fragments,Interface,我有一个活动,其中有一个ViewPager,在这个ViewPager中有一些片段。当碎片显示在屏幕上时,我需要向碎片发送数据。所以我想在活动中实现一个接口,将数据发送到片段 public interface SetDataToFragment { void getData(List<FinanceOperationModel> aModels); } public class FinanceMonitoringActivity extends ApiActi

我有一个活动,其中有一个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;
...
公共接口SetDataToFragment{
void getData(列出amodel);
}
公共类FinanceMonitoringActivity扩展了ApiActivity2实现了FinanceMonitoringView
,FinanceMonitoringFragment.SaveDataInterface{
私有setdatatofragmentminterface;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u finance\u monitoring);
把(这个)绑起来;
mInterface=(SetDataToFragment)this;
...
然后是一个错误:

原因:java.lang.ClassCastException:com.akbars.bankok.screens.financeMonitoring.FinanceMonitoringActivity无法强制转换为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);
    }
}
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);
    }
}
FragmentA.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);
    }
}
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
中实现
SetDataToFragment
,如果要将数据发送到查看页面片段,可以从viewPager适配器类中执行,或者如果要从活动中执行,请在活动中实现接口,并从片段中调用该接口以返回所需数据。

FinanceMonitoringActivity未实现SetDataToFragment