Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.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

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
Java 当使用tabs和onTabSelected()时,如何在片段之间传递数据?_Java_Android_Android Fragments_Interface - Fatal编程技术网

Java 当使用tabs和onTabSelected()时,如何在片段之间传递数据?

Java 当使用tabs和onTabSelected()时,如何在片段之间传递数据?,java,android,android-fragments,interface,Java,Android,Android Fragments,Interface,这是指片段之间的通信,但不适用于选项卡。我想在我的“日托”片段(一个标签)和我的“你”片段(一个标签)之间发送数据。我在这件事上耽搁了一个星期。我真的不知道如何将接口的概念与android选项卡式片段和异步任务中的数据结合起来 我已经在我的日托片段中创建了一个接口。我想在“passparam”方法的帮助下将字符串“daycarename”发送到“you”片段。据我所知,它需要以某种方式通过实现TabClickedListener界面的MainActivity。如何将它从MainActivity传

这是指片段之间的通信,但不适用于选项卡。我想在我的“日托”片段(一个标签)和我的“你”片段(一个标签)之间发送数据。我在这件事上耽搁了一个星期。我真的不知道如何将接口的概念与android选项卡式片段和异步任务中的数据结合起来

我已经在我的日托片段中创建了一个接口。我想在“passparam”方法的帮助下将字符串“daycarename”发送到“you”片段。据我所知,它需要以某种方式通过实现TabClickedListener界面的MainActivity。如何将它从MainActivity传递回另一个片段

public class MainActivity extends Activity implements ActionBar.TabListener, DaycareFragment.TabClickedListener {

    SectionsPagerAdapter mSectionsPagerAdapter;
    ViewPager mViewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ActionBar actionBar = getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager(), this);

        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mSectionsPagerAdapter);

         mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                actionBar.setSelectedNavigationItem(position);
            }
        });

         for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
            actionBar.addTab(
                actionBar.newTab()
                    .setText(mSectionsPagerAdapter.getPageTitle(i))
                    .setTabListener(this));
        }
    }

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        mViewPager.setCurrentItem(tab.getPosition());
    }

   public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {

        super(fm);
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:

                return new YouFragment();
            case 1:

                return new DaycareFragment();
            case 2:

                return new ThirdFragment();

        }

        return null;
    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        Locale l = Locale.getDefault();
        switch (position) {
            case 0:
                return getString(R.string.title_section3).toUpperCase(l);
            case 1:
                return getString(R.string.title_section1).toUpperCase(l);
            case 2:
                return getString(R.string.title_section2).toUpperCase(l);

        }
        return null;
    }
}

    public class MainFragment extends Fragment {

        private static final String ARG_SECTION_TYPE = "section type";

        public MainFragment(){}

        public MainFragment(int sectionNumber) {
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_TYPE, sectionNumber);
            setArguments(args);
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);

            //setup the view
            switch(getArguments().getInt(ARG_SECTION_TYPE)) {
                //hide or show fields based on page number.
            }

            return rootView;
        }
    }
    @Override
    public void passParam(String var) {
        Toast.makeText(this, "Clicked " + var, Toast.LENGTH_LONG).show();

    }
}
公共类MainActivity扩展活动实现ActionBar.TablListener、DaycareFragment.TabClickedListener{
分段SPAGERADAPTER mSectionsPagerAdapter;
ViewPager mViewPager;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
最终ActionBar ActionBar=getActionBar();
actionBar.setNavigationMode(actionBar.NAVIGATION\u MODE\u选项卡);
mSectionsPagerAdapter=新的SectionsPagerAdapter(getFragmentManager(),this);
mViewPager=(ViewPager)findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.setOnPageChangeListener(新的ViewPager.SimpleOnPageChangeListener(){
@凌驾
已选择页面上的公共无效(内部位置){
actionBar.setSelectedNavigationItem(位置);
}
});
对于(int i=0;i
我正在我的ListFragment中实现一个接口:

public class DaycareFragment extends ListFragment {

    TabClickedListener listener;

    public interface TabClickedListener {
        public void passParam(String var);
    }
String email;
    UserFunctions userFunctions;
    Boolean owner;
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_daycare, container, false);
        movies = new ArrayList<HashMap<String, String>>();

        userFunctions = new UserFunctions();
        HashMap map = new HashMap();
        map = userFunctions.getdauser(getActivity());
        email = (String) map.get("email");

        new GetDaDaycares().execute();

        return rootView;
    }
class GetDaDaycares extends AsyncTask<String, String, String>{

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

        }


        @Override
        protected String doInBackground(String... args) {

            String city = "london";
            try {

                List<NameValuePair> params = new ArrayList<NameValuePair> ();
                params.add(new BasicNameValuePair("city", city));

                @SuppressWarnings("unused")
                JSONObject json = parser.makeHttpRequest(getdaycare, params);
                jArray = json.getJSONArray("lTable");

                for (int i =0; i<jArray.length();i++){

                    JSONObject c = jArray.getJSONObject(i);
                    String daycarename = c.getString("daycarename");

                    HashMap<String, String> map = new HashMap<String, String>();
                    map.put("daycarename", daycarename);
                    movies.add(map);

                }

            } catch(JSONException e) {

                e.printStackTrace();
            }
            return null;

        }

        protected void onPostExecute(String zoom){
            pDialog.dismiss();

            getActivity().runOnUiThread(new Runnable() {
                public void run() {


                    ListAdapter adapter = new SimpleAdapter(getActivity(), movies,
                            R.layout.list, new String[] {"daycarename"},
                            new int[]{R.id.textView1});

                    setListAdapter(adapter);
                    ListView lv = getListView();
                    lv.setOnItemClickListener(new OnItemClickListener(){

                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position,
                                                long id) {

                            String daycarename =movies.get(position).get("daycarename");

                        }

                    });


                }
            });
        }

    }

}
公共类DaycareFragment扩展了ListFragment{
TabClickedListener监听器;
公共界面选项卡ClickedListener{
公共无效密码参数(字符串变量);
}
字符串电子邮件;
用户函数用户函数;
布尔所有者;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment_日托,容器,假);
电影=新的ArrayList();
userFunctions=新的userFunctions();
HashMap=newHashMap();
map=userFunctions.getdauser(getActivity());
email=(字符串)map.get(“email”);
新建GetDaDaycares().execute();
返回rootView;
}
类GetDaDaycares扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(字符串…args){
String city=“伦敦”;
试一试{
List params=newarraylist();
参数添加(新的BasicNameValuePair(“城市”,城市));
@抑制警告(“未使用”)
JSONObject json=parser.makeHttpRequest(getdaycare,params);
jArray=json.getJSONArray(“lTable”);
对于(inti=0;i如果这是我的问题(它一直是),我会有一个中心对象,负责在片段之间“共享”数据

实现通常似乎遵循两条路径中的一条:第一条,创建一个单例,任何对象都可以获得一个实例;第二条,活动初始化对象的单个实例,并在初始化时将其传递给每个片段

然后,片段(或异步任务)将通过观察者模式或在显示器上更新并从该中心对象提取数据
public void passStrToYou(String daycarename)
{
   FragmentManager fm = getFragmentManager();               
   Fragment youFrag = (YouFragment)fm.FragmentManager fm.findFragmentById(R.id.youFragment);

   //call mathod 'setDayCareName' in 'you' fragment
   youFrag.setDayCareName(daycarename);
}