Android 没有finish()方法,活动切换无法工作
我的代码如下所示: TableActivity.javaAndroid 没有finish()方法,活动切换无法工作,android,Android,我的代码如下所示: TableActivity.java public class TableActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ta
public class TableActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_table_selection);
itemName = (TextView) findViewById(R.id.itemName);
foodMenuLayout = (LinearLayout) findViewById(R.id.foodMenuLayout);
drinkMenuLayout = (LinearLayout) findViewById(R.id.drinksMenuLayout);
tableNo = (TextView) findViewById(R.id.tableNo);
foodMenu = (TextView) findViewById(R.id.foodMenu);
drinksMenu = (TextView) findViewById(R.id.drinksMenu);
tapLayout = (LinearLayout) findViewById(R.id.tapLayout);
foodImage = (ImageView) findViewById(R.id.foodImage);
drinkImage = (ImageView) findViewById(R.id.drinkImage);
getFoodTruckInfo();
tapLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tableList = TableList.getInstance(MyCart.getInstance().getTableNo());
tableList.setItemListener(TableActivity.this);
tableList.setCancelable(false);
tableList.show(getSupportFragmentManager(), null);
}
});
setFontStyle();
foodMenuLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (TextUtils.isEmpty(tableNo.getText().toString().trim())) {
Toast.makeText(TableActivity.this, "Please select table", Toast.LENGTH_SHORT).show();
} else {
lauchItemActivity();
}
}
});
drinkMenuLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (TextUtils.isEmpty(tableNo.getText().toString().trim())) {
Toast.makeText(TableActivity.this, "Please select table", Toast.LENGTH_SHORT).show();
} else {
lauchDrinksActivity();
}
}
});
}
private void lauchItemActivity() {
FoodtruckInfo foodtruckInfo = new FoodtruckInfo();
foodtruckInfo.setFoodTruckName(foodTruck.getFoodTruckName());
foodtruckInfo.setFoodTruckImage(foodTruck.getFoodTruckLogo());
foodtruckInfo.setFoodTruckId(foodTruck.getFoodTruckId());
foodtruckInfo.setOrderStatus(foodTruck.getFoodTruckOpenStatus());
Intent intent = new Intent(TableActivity.this, FoodTruckItemsActivity.class);
intent.putExtra(Consts.FOODTRUCK_INFO, foodtruckInfo);
intent.putExtra(Consts.IS_SEARCH, false);
intent.putExtra(Consts.IS_DRINKS, false);
intent.putParcelableArrayListExtra(Consts.FOODTRUCK_ITEM, (ArrayList<? extends Parcelable>) foodTruck.getFoodTruckItemList());
startActivityForResult(intent, Consts.ITEMS_ACTIVITY);
}
private void lauchDrinksActivity() {
FoodtruckInfo foodtruckInfo = new FoodtruckInfo();
foodtruckInfo.setFoodTruckName(foodTruck.getFoodTruckName());
foodtruckInfo.setFoodTruckImage(foodTruck.getFoodTruckLogo());
foodtruckInfo.setFoodTruckId(foodTruck.getFoodTruckId());
foodtruckInfo.setOrderStatus(foodTruck.getFoodTruckOpenStatus());
Intent intent = new Intent(TableActivity.this, FoodTruckDrinksActivity.class);
intent.putExtra(Consts.FOODTRUCK_INFO, foodtruckInfo);
intent.putExtra(Consts.IS_SEARCH, false);
intent.putExtra(Consts.IS_DRINKS, true);
intent.putParcelableArrayListExtra(Consts.FOODTRUCK_ITEM, (ArrayList<? extends Parcelable>) foodTruck.getFoodTruckDrinkList());
startActivityForResult(intent, Consts.DRINKS_ACTIVITY);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == Consts.ITEMS_ACTIVITY) {
lauchDrinksActivity();
} else if (requestCode == Consts.DRINKS_ACTIVITY) {
lauchItemActivity();
}
}
}
}
public class FoodTruckItemsActivity extends AppCompatActivity implements
FoodTruckItemsAdapter.OnItemClickListener, FoodTruckItemFragment.FoodTruckItemListener,
ViewPager.OnPageChangeListener, View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_food_truck_item);
routeView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
routeToAnotherMenu();
}
});
}
private void routeToAnotherMenu() {
setResult(Activity.RESULT_OK);
}
}
FoodTruckItemsActivity.java和FoodTruckDrinksActivity.java是相同的。因此,这里我想要的是,如果我按下routeView
,它应该从FoodTruckItemsActivity.java
切换到FoodTruckDrinksActivity.java
,反之亦然。
为此,我编写了routeToAnotherMenu()
方法。现在的问题是,如果我不在routeToAnotherMenu
中编写finish()
,它就不会加载另一个活动。但是如果我在setResult()之后写入finish()
,那么它就可以完美地工作
我不喜欢在该方法中使用finish()的主要原因是它会擦除数据。那么,有没有什么方法可以不用编写finish()方法就可以做到这一点呢 在启动另一个活动之前,或者如果希望启动此活动的活动在退出(调用finish)后收集结果,则应使用setResult()
我可以想象两种方法来实现你想要的结果:
1) 将finish()之后要保存的“数据”(例如,转换为单例)与当前活动解耦。
如果FoodTruckItemsActivity.java和FoodTruckDrinksActivity.java几乎相同,那么它们应该从一个公共父级继承,这样您就可以轻松地完成这项工作。
这也更好,因为“TableActivity”每次都会启动一个新的意图,所以不调用finish是无用的
2) 您还可以更改将FoodRuckItemsActivity和FoodRuckDrinksActivity转换为片段的方法,将它们交换到“TableActivity”的片段容器中,并将数据共享到活动中。在启动另一个活动之前应使用setResult(),或者,如果希望启动此活动的活动在退出后收集结果(调用finish)
我可以想象两种方法来实现你想要的结果:
1) 将finish()之后要保存的“数据”(例如,转换为单例)与当前活动解耦。
如果FoodTruckItemsActivity.java和FoodTruckDrinksActivity.java几乎相同,那么它们应该从一个公共父级继承,这样您就可以轻松地完成这项工作。
这也更好,因为“TableActivity”每次都会启动一个新的意图,所以不调用finish是无用的
2) 您还可以更改将FoodRuckItemsActivity和FoodRuckDrinksActivity转换为片段的方法,将它们交换到“TableActivity”的片段容器中,并将数据共享到活动中。来自以下文档:
启动的活动退出时调用(…)
仅设置结果不会导致调用该方法
如果你想在屏幕间自由切换,也许你应该考虑从文档中使用片段<
: 启动的活动退出时调用(…) 仅设置结果不会导致调用该方法如果你想在屏幕之间自由切换,也许你应该考虑使用片段?
在你的情况下,<强>食物活动> <强>是从你打开<强>食物活动> <强> >的共同活动。 现在,例如,在TableActivity中声明ArrayList以将所有选定数据存储在该ArrayList中 现在,当您为FoodTruckItemsActivity启动TactivityForresult()时。在FoodTruckItemsActivity中声明用于添加数据的ArrayList。现在,当你转到另一个菜单时,写下这个Intent intent=new Intent();
intent.putStringArrayList("FOODITEMLIST", myItemList);
setResult(intent);
finish();
现在,在表活动中,结果出现在onActivityResult中
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == Consts.ITEMS_ACTIVITY) {
// Get the arraylist and add that list in Table Activity Main ArrayList
// which we declare earlier in Table Activity.
lauchDrinksActivity();
} else if (requestCode == Consts.DRINKS_ACTIVITY) {
lauchItemActivity();
}
}
}
在您的情况下,FoodTruckItemActivity是打开FoodTruckDrinkActivity的常见活动 现在,例如,在TableActivity中声明ArrayList以将所有选定数据存储在该ArrayList中 现在,当您为FoodTruckItemsActivity启动TactivityForresult()时。在FoodTruckItemsActivity中声明用于添加数据的ArrayList。现在,当你转到另一个菜单时,写下这个
Intent intent=new Intent();
intent.putStringArrayList("FOODITEMLIST", myItemList);
setResult(intent);
finish();
现在,在表活动中,结果出现在onActivityResult中
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == Consts.ITEMS_ACTIVITY) {
// Get the arraylist and add that list in Table Activity Main ArrayList
// which we declare earlier in Table Activity.
lauchDrinksActivity();
} else if (requestCode == Consts.DRINKS_ACTIVITY) {
lauchItemActivity();
}
}
}
也发布清单文件,说明您使用startActivityForResult()的原因;而您可以使用startActivity();,通过简单的方式调用它@AniruddhParihar我想追踪activity@MrugeshThaker如果不编写finish(),它将不允许转到以前的活动。让我知道foodruckitemsacity包含数据的一件事,对吗?所以您想在TableActivity中使用该数据,是吗?让我know@AndyDeveloper我在FoodTruckItemActivity.java中添加了一些项目。现在,如果我从FoodTruckItemActivity.java切换到FoodTruckDrinkActivity.java,然后再次从FoodTruckDrinkActivity.java切换到FoodTruckItemsActivity.java,我应该会看到这些项目添加到FoodTruckItemActivity.javaPost您的清单文件中,以及您使用startActivityForResult()的原因;而您可以使用startActivity();,通过简单的方式调用它@AniruddhParihar我想追踪activity@MrugeshThaker如果不编写finish(),它将不允许转到以前的活动。让我知道一件事FoodTruckItemsActivity包含正确的数据,所以您想在TableActivity中使用该数据,是吗?让我know@AndyDeveloper我在FoodTruckItemActivity.java中添加了一些项目。现在,如果我从FoodTruckItemActivity.java切换到FoodTruckDrinkActivity.java,然后再次从FoodTruckDrinkActivity.java切换到FoodTruckItemsActivity.java,我应该会看到那些添加到FoodTruckItemActivity.java中的项目