2017-04-19 100 views
1

我有一个活动,其中有一个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

如何正确启动界面中的活性片段使用数据?

+0

FinanceMonitoringActivity没有实现SetDataToFragment – Pehlaj

回答

0

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

例如

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

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

FinanceMonitoringActivity

1

如果你想将数据发送到你可以做到这一点从viewPager适配器类或者如果你想从活动做落实活动的接口并调用该视图寻呼机片段实现SetDataToFragment从片段中返回所需的数据。