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