Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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 在Android中从一个活动开始更新多个片段_Java_Android_Json_Android Fragments_Arraylist - Fatal编程技术网

Java 在Android中从一个活动开始更新多个片段

Java 在Android中从一个活动开始更新多个片段,java,android,json,android-fragments,arraylist,Java,Android,Json,Android Fragments,Arraylist,我正在制作一个有主活动的应用程序,主活动有两个片段: MapFragment(在餐厅所在的每个位置都包含图钉) 餐厅片段(包含餐厅列表) 到目前为止,只要用户打开应用程序并单击选项卡,我就能够从服务器更新列表myRestaurantsFragment。 我想做的是以下操作-我想在用户启动应用程序时更新服务器上的两个片段。我不想将餐厅保存到本地sqlite数据库中。我想在我的主要活动中获取列表并将其传递给两个选项卡,将餐厅列表传递给myRestaurantFragment,并且我想将此列表中的相同

我正在制作一个有主活动的应用程序,主活动有两个片段:

  • MapFragment(在餐厅所在的每个位置都包含图钉)
  • 餐厅片段(包含餐厅列表)
  • 到目前为止,只要用户打开应用程序并单击选项卡,我就能够从服务器更新列表myRestaurantsFragment。 我想做的是以下操作-我想在用户启动应用程序时更新服务器上的两个片段。我不想将餐厅保存到本地sqlite数据库中。我想在我的主要活动中获取列表并将其传递给两个选项卡,将餐厅列表传递给myRestaurantFragment,并且我想将此列表中的相同信息传递给my MapsFragment。我想把我的列表代码放到主活动中,然后把它传递给主活动的三个片段,但是我是一个初学者,通过简单的例子来开发这个应用程序,所以我有点迷茫

    主要活动:

    public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {
    
    private SessionManager session;
    private SQLiteHandler db;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        returnMyRestaurants();
    
        // SqLite database handler
        db = new SQLiteHandler(getApplicationContext());
        // session manager
        session = new SessionManager(getApplicationContext());
    
        if (!session.isLoggedIn()) {
            Intent intent = new Intent(this, LoginActivity.class);
            startActivity(intent);
        } else {
    
            TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
            tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.tab_map)));
            tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.tab_my_restaurants)));
    
            tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
            tabLayout.setTabMode(TabLayout.MODE_FIXED);
    
            final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
            final PagerAdapter adapter = new PagerAdapter
                    (getSupportFragmentManager(), tabLayout.getTabCount());
            viewPager.setAdapter(adapter);
            viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    
            MyRestaurantsFragment mapsFragment = new MyRestaurantsFragment();
            Bundle args = new Bundle();
            args.putParcelable("restaurantList", (Parcelable) restaurantList);
            mapsFragment.setArguments(args);
    
            tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
                @Override
                public void onTabSelected(TabLayout.Tab tab) {
                    viewPager.setCurrentItem(tab.getPosition());
                }
    
                @Override
                public void onTabUnselected(TabLayout.Tab tab) {
    
                }
    
                @Override
                public void onTabReselected(TabLayout.Tab tab) {
    
                }
            });
    ...
    public void returnMyRestuaurants() {
        SQLiteHandler db = new SQLiteHandler(getApplicationContext());
        HashMap<String, String> user = db.getUserDetails();
        final String userId = user.get("uid");
    
         StringRequest restuaurantReq = new StringRequest(Request.Method.POST,
                AppConfig.URL_GET_RESTUAURANT, new Response.Listener<String>() {
    
            @Override
            public void onResponse(String response) {
                try {
                    JSONObject jObj = new JSONObject(response);
                    boolean error = jObj.getBoolean("error");
    
                    if (!error) {
                        JSONArray restuaurants = jObj.getJSONArray("restuaurant");
    
                        // Parsing json
                        for (int i = 0; i < restuaurants.length(); i++) {
                            try {
    
                                JSONObject obj = restuaurants.getJSONObject(i);
                                RestuaurantParcelableModel restuaurant = new RestuaurantParcelableModel();
                                restuaurant.setUserName(obj.getString("name"));
                                if (obj.getString("image") != null && !obj.getString("image").isEmpty()) {
                                    restuaurant.setThumbnailUrl(obj.getString("image"));
                                }
                                restuaurant.setLat(obj.getString("latitude"));
                                restuaurant.setLon(obj.getString("longitude"));
                                restuaurant.setDate(obj.getString("event_date"));
                                restuaurant.setTime(obj.getString("event_time"));
    
                                // adding restuaurant to restuaurant array
                                restuaurantList.add(restuaurant);
    
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
    
                        // notifying list adapter about data changes so that it renders the list view with updated data
                        adapter.notifyDataSetChanged();
                    } else {
                        // Error. Get the error message
                        String errorMsg = jObj.getString("error_msg");
                    }
                } catch (JSONException e) {
                    // JSON error
                    e.printStackTrace();
                }
    
            }
        }, new Response.ErrorListener() {
    ...
    

    当您调用服务器并以列表的形式获得响应时,请将其保存在活动中的arrayList中。让我们称之为
    ArrayList restaurantList=new ArrayList()
    现在,无论何时切换片段,都要使用Bundle将此列表传递给新片段

    Bundle args = new Bundle();
    args.putParcelableArrayList("myList",restaurantList);   
    MapFragment newFragment = new MapFragment ();
    newFragment.setArguments(args);
    


    在此之后执行片段事务。

    当您调用服务器并以列表的形式获得响应时,请将其保存在活动中的arrayList中。让我们称之为
    ArrayList restaurantList=new ArrayList()
    现在,无论何时切换片段,都要使用Bundle将此列表传递给新片段

    Bundle args = new Bundle();
    args.putParcelableArrayList("myList",restaurantList);   
    MapFragment newFragment = new MapFragment ();
    newFragment.setArguments(args);
    


    在这之后执行碎片事务。

    可观测设计模式会起作用。可观测设计模式会起作用。那么你得到答案了吗?我仍然有一些错误,我无法在周末前检查出来,我会让你知道的。当然,在这里的评论中回答这个问题,只要你愿意。:)好的,下周末我会通知你的。谢谢你,那么你得到答案了吗?我仍然有一些错误,我无法在周末之前检查出来,我会让你知道的。当然,你可以随时在这里的评论中回答这个问题。:)好的,下周末我会通知你的。非常感谢。
    import android.os.Parcel;
    import android.os.Parcelable;
    
    public class RestaurantParcelableModel implements Parcelable {
    private String userName, thumbnailUrl, lat, lon, restname, description;
    ...
    
    Bundle args = new Bundle();
    args.putParcelableArrayList("myList",restaurantList);   
    MapFragment newFragment = new MapFragment ();
    newFragment.setArguments(args);