使后退按钮 returns 从 activity 到 Android 中的片段
Make back button returns from an activity to a fragment in Android
我正在开发一个 Android 应用程序,我有一个名为 "More" 的片段,在这个片段中我有 "About Us"、"Terms and Conditions" 这样的东西,它们是正常活动。我想要做的是,当我点击里面的后退按钮时,例如,关于我们 Activity 我想 return 到 "More" 片段。我怎样才能做到这一点?这就是我在 aboutUs activity:
中的内容
"onBackPressed method was supposed to go back to the fragment once I click on the back button, but it is not working. The application crashes and in the log cat is says "您是否在清单中声明了 MoreFragment Activity?”,但我尝试声明但它不起作用。
public class AboutUs extends BaseActivity {
private ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about_us);
image = (ImageView) findViewById(R.id.imageView2);
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent launchactivity = new Intent(AboutUs.this, StartScreenActivity.class);
startActivity(launchactivity);
}
});
}
@Override
public void onBackPressed()
{
Intent intent = new Intent(this,MoreFragment.class);
startActivity(intent);
}
}
这是调用 Activity 的片段:
public class MoreFragment extends Fragment implements View.OnClickListener {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_more, null, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
TextView lbl1 = (TextView) view.findViewById(R.id.lbl1);
TextView lbl2 = (TextView) view.findViewById(R.id.lbl2);
TextView lbl3 = (TextView) view.findViewById(R.id.lbl3);
TextView lbl4 = (TextView) view.findViewById(R.id.lbl4);
TextView lbl5 = (TextView) view.findViewById(R.id.lbl5);
TextView lbl6 = (TextView) view.findViewById(R.id.lbl6);
TextView lbl7 = (TextView) view.findViewById(R.id.lbl7);
TextView lbl8 = (TextView) view.findViewById(R.id.lbl8);
TextView lbl9 = (TextView) view.findViewById(R.id.lbl9);
ImageView imv1 = (ImageView) view.findViewById(R.id.imv1);
ImageView imv2 = (ImageView) view.findViewById(R.id.imv2);
ImageView imv3 = (ImageView) view.findViewById(R.id.imv3);
ImageView imv4 = (ImageView) view.findViewById(R.id.imv4);
ImageView imv5 = (ImageView) view.findViewById(R.id.imv5);
ImageView imv6 = (ImageView) view.findViewById(R.id.imv6);
ImageView imv7 = (ImageView) view.findViewById(R.id.imv7);
ImageView imv8 = (ImageView) view.findViewById(R.id.imv8);
ImageView imv9 = (ImageView) view.findViewById(R.id.imv9);
ImageView imv10 = (ImageView) view.findViewById(R.id.imv10);
TextView btnSignOut = (TextView) view.findViewById(R.id.lbl10);
lbl1.setOnClickListener(this);
lbl2.setOnClickListener(this);
lbl3.setOnClickListener(this);
lbl4.setOnClickListener(this);
lbl5.setOnClickListener(this);
lbl6.setOnClickListener(this);
lbl7.setOnClickListener(this);
lbl8.setOnClickListener(this);
lbl9.setOnClickListener(this);
imv1.setOnClickListener(this);
imv2.setOnClickListener(this);
imv3.setOnClickListener(this);
imv4.setOnClickListener(this);
imv5.setOnClickListener(this);
imv6.setOnClickListener(this);
imv7.setOnClickListener(this);
imv8.setOnClickListener(this);
imv9.setOnClickListener(this);
btnSignOut.setOnClickListener(this);
View view9 = view.findViewById(R.id.view9);
View view8 = view.findViewById(R.id.view8);
if (!PrefernceHelper.getBoolean(getActivity(), Commons.Constants.USERLOGGEDIN)) {
imv8.setVisibility(View.INVISIBLE);
lbl8.setVisibility(View.INVISIBLE);
imv10.setVisibility(View.INVISIBLE);
btnSignOut.setVisibility(View.INVISIBLE);
view9.setVisibility(View.INVISIBLE);
view8.setVisibility(View.INVISIBLE);
}
}
private void callAllMoreScreen(String type, Class<?> className) {
Intent intent = new Intent();
intent.setClass(getActivity(), className);
intent.putExtra(Commons.Constants.LOAD_TYPE_URL, type);
getActivity().startActivity(intent);
}
private void callAllMoreScreen1(Class<?> className) {
Intent intent = new Intent();
intent.setClass(getActivity(), className);
getActivity().startActivity(intent);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.lbl1:
callAllMoreScreen1(AboutUs.class);
break;
case R.id.lbl2:
callAllMoreScreen("contact-us", AllMoreScreenActivity.class);
break;
case R.id.lbl3:
callAllMoreScreen1(TermsConditions.class);
break;
case R.id.lbl4:
callAllMoreScreen1(PrivacyPolicy.class);
break;
case R.id.lbl5:
callAllMoreScreen("faqs", AllMoreScreenActivity.class);
break;
case R.id.lbl6:
callAllMoreScreen("how-it-work", AllMoreScreenActivity.class);
break;
case R.id.lbl7:
callAllMoreScreen("about-foodlebee", AllMoreScreenActivity.class);
break;
case R.id.lbl8:
callAllMoreScreen(" ", PredefinedAddressActivity.class);
break;
case R.id.lbl9:
callAllMoreScreen(" ", TrackyourorderActivity.class);
break;
case R.id.imv1:
callAllMoreScreen1(AboutUs.class);
break;
case R.id.imv2:
callAllMoreScreen("contact-us", AllMoreScreenActivity.class);
break;
case R.id.imv3:
callAllMoreScreen1(TermsConditions.class);
break;
case R.id.imv4:
callAllMoreScreen1(PrivacyPolicy.class);
break;
case R.id.imv5:
callAllMoreScreen("faqs", AllMoreScreenActivity.class);
break;
case R.id.imv6:
callAllMoreScreen("how-it-work", AllMoreScreenActivity.class);
break;
case R.id.imv7:
callAllMoreScreen("about-foodlebee", AllMoreScreenActivity.class);
break;
case R.id.imv8:
callAllMoreScreen(" ", PredefinedAddressActivity.class);
break;
case R.id.imv9:
callAllMoreScreen(" ", TrackyourorderActivity.class);
break;
case R.id.lbl10:
PrefernceHelper.clearAll(getActivity());
callAllMoreScreen("", SignInActivity.class);
getActivity().finish();
break;
}
}
}
这是调用片段的Activity:
public class TabLayoutScreenActivity extends BaseActivity {
private TabLayout tabLayout;
private Bundle bundle;
//Bundle bundle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_screen);
tabLayout = (TabLayout) findViewById(R.id.tab_layout);
ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar); // actionBarSetUp(true);
// getSupportActionBar().setIcon(R.drawable.small_bee);
getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);
// getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// getSupportActionBar().setIcon(R.drawable.ic_launcher);
viewPager.setAdapter(new SectionPagerAdapter(getSupportFragmentManager()));
tabLayout.setupWithViewPager(viewPager);
ImageView foodlebee = (ImageView) findViewById(R.id.imageView2);
foodlebee.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent launchactivity = new Intent(TabLayoutScreenActivity.this,StartScreenActivity.class);
startActivity(launchactivity);
}
});
// bundle = getIntent().getExtras();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_login, menu);
if (PrefernceHelper.getBoolean(this, Commons.Constants.USERLOGGEDIN)) {
MenuItem item = menu.findItem(R.id.user_login);
item.setVisible(false);
invalidateOptionsMenu();
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.user_login) {
intentCall(SignInActivity.class, null, 0);
return true;
} else if (item.getItemId() == R.id.home) {
intentCall(StartScreenActivity.class, null, 0);
finish();
return true;
}
return false;
}
@Override
protected void onStart() {
super.onStart();
bundle = getIntent().getExtras();
int tabPostion = 0;
if (bundle != null)
tabPostion = bundle.getInt(Commons.Constants.TAB_POSITION, 0);
TabLayout.Tab tab = tabLayout.getTabAt(tabPostion);
tab.select();
}
public class SectionPagerAdapter extends FragmentPagerAdapter {
public SectionPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new ChefFragment();
case 1:
return new OrderFragment();
case 2:
return new BasketFragment();
case 3:
return new MoreFragment();
default:
return new ChefFragment();
}
}
@Override
public int getCount() {
return 4;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Chefs";
case 1:
return "Orders";
case 2:
return "Cart";
case 3:
return "More";
default:
return "Chef";
}
}
}
}
Just finish() onbackpressed 中的当前 activity 因此您将 return 到更多片段,因为前一个 activity 已经在返回堆栈中。您不需要再次启动之前的 activity。
而且你的代码是错误的..你正试图启动一个不可能的片段。这就是抛出此异常的原因。
像这样更改您的代码:
@Override
public void onBackPressed()
{
finish();
}
我正在开发一个 Android 应用程序,我有一个名为 "More" 的片段,在这个片段中我有 "About Us"、"Terms and Conditions" 这样的东西,它们是正常活动。我想要做的是,当我点击里面的后退按钮时,例如,关于我们 Activity 我想 return 到 "More" 片段。我怎样才能做到这一点?这就是我在 aboutUs activity:
中的内容"onBackPressed method was supposed to go back to the fragment once I click on the back button, but it is not working. The application crashes and in the log cat is says "您是否在清单中声明了 MoreFragment Activity?”,但我尝试声明但它不起作用。
public class AboutUs extends BaseActivity {
private ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about_us);
image = (ImageView) findViewById(R.id.imageView2);
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent launchactivity = new Intent(AboutUs.this, StartScreenActivity.class);
startActivity(launchactivity);
}
});
}
@Override
public void onBackPressed()
{
Intent intent = new Intent(this,MoreFragment.class);
startActivity(intent);
}
}
这是调用 Activity 的片段:
public class MoreFragment extends Fragment implements View.OnClickListener {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_more, null, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
TextView lbl1 = (TextView) view.findViewById(R.id.lbl1);
TextView lbl2 = (TextView) view.findViewById(R.id.lbl2);
TextView lbl3 = (TextView) view.findViewById(R.id.lbl3);
TextView lbl4 = (TextView) view.findViewById(R.id.lbl4);
TextView lbl5 = (TextView) view.findViewById(R.id.lbl5);
TextView lbl6 = (TextView) view.findViewById(R.id.lbl6);
TextView lbl7 = (TextView) view.findViewById(R.id.lbl7);
TextView lbl8 = (TextView) view.findViewById(R.id.lbl8);
TextView lbl9 = (TextView) view.findViewById(R.id.lbl9);
ImageView imv1 = (ImageView) view.findViewById(R.id.imv1);
ImageView imv2 = (ImageView) view.findViewById(R.id.imv2);
ImageView imv3 = (ImageView) view.findViewById(R.id.imv3);
ImageView imv4 = (ImageView) view.findViewById(R.id.imv4);
ImageView imv5 = (ImageView) view.findViewById(R.id.imv5);
ImageView imv6 = (ImageView) view.findViewById(R.id.imv6);
ImageView imv7 = (ImageView) view.findViewById(R.id.imv7);
ImageView imv8 = (ImageView) view.findViewById(R.id.imv8);
ImageView imv9 = (ImageView) view.findViewById(R.id.imv9);
ImageView imv10 = (ImageView) view.findViewById(R.id.imv10);
TextView btnSignOut = (TextView) view.findViewById(R.id.lbl10);
lbl1.setOnClickListener(this);
lbl2.setOnClickListener(this);
lbl3.setOnClickListener(this);
lbl4.setOnClickListener(this);
lbl5.setOnClickListener(this);
lbl6.setOnClickListener(this);
lbl7.setOnClickListener(this);
lbl8.setOnClickListener(this);
lbl9.setOnClickListener(this);
imv1.setOnClickListener(this);
imv2.setOnClickListener(this);
imv3.setOnClickListener(this);
imv4.setOnClickListener(this);
imv5.setOnClickListener(this);
imv6.setOnClickListener(this);
imv7.setOnClickListener(this);
imv8.setOnClickListener(this);
imv9.setOnClickListener(this);
btnSignOut.setOnClickListener(this);
View view9 = view.findViewById(R.id.view9);
View view8 = view.findViewById(R.id.view8);
if (!PrefernceHelper.getBoolean(getActivity(), Commons.Constants.USERLOGGEDIN)) {
imv8.setVisibility(View.INVISIBLE);
lbl8.setVisibility(View.INVISIBLE);
imv10.setVisibility(View.INVISIBLE);
btnSignOut.setVisibility(View.INVISIBLE);
view9.setVisibility(View.INVISIBLE);
view8.setVisibility(View.INVISIBLE);
}
}
private void callAllMoreScreen(String type, Class<?> className) {
Intent intent = new Intent();
intent.setClass(getActivity(), className);
intent.putExtra(Commons.Constants.LOAD_TYPE_URL, type);
getActivity().startActivity(intent);
}
private void callAllMoreScreen1(Class<?> className) {
Intent intent = new Intent();
intent.setClass(getActivity(), className);
getActivity().startActivity(intent);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.lbl1:
callAllMoreScreen1(AboutUs.class);
break;
case R.id.lbl2:
callAllMoreScreen("contact-us", AllMoreScreenActivity.class);
break;
case R.id.lbl3:
callAllMoreScreen1(TermsConditions.class);
break;
case R.id.lbl4:
callAllMoreScreen1(PrivacyPolicy.class);
break;
case R.id.lbl5:
callAllMoreScreen("faqs", AllMoreScreenActivity.class);
break;
case R.id.lbl6:
callAllMoreScreen("how-it-work", AllMoreScreenActivity.class);
break;
case R.id.lbl7:
callAllMoreScreen("about-foodlebee", AllMoreScreenActivity.class);
break;
case R.id.lbl8:
callAllMoreScreen(" ", PredefinedAddressActivity.class);
break;
case R.id.lbl9:
callAllMoreScreen(" ", TrackyourorderActivity.class);
break;
case R.id.imv1:
callAllMoreScreen1(AboutUs.class);
break;
case R.id.imv2:
callAllMoreScreen("contact-us", AllMoreScreenActivity.class);
break;
case R.id.imv3:
callAllMoreScreen1(TermsConditions.class);
break;
case R.id.imv4:
callAllMoreScreen1(PrivacyPolicy.class);
break;
case R.id.imv5:
callAllMoreScreen("faqs", AllMoreScreenActivity.class);
break;
case R.id.imv6:
callAllMoreScreen("how-it-work", AllMoreScreenActivity.class);
break;
case R.id.imv7:
callAllMoreScreen("about-foodlebee", AllMoreScreenActivity.class);
break;
case R.id.imv8:
callAllMoreScreen(" ", PredefinedAddressActivity.class);
break;
case R.id.imv9:
callAllMoreScreen(" ", TrackyourorderActivity.class);
break;
case R.id.lbl10:
PrefernceHelper.clearAll(getActivity());
callAllMoreScreen("", SignInActivity.class);
getActivity().finish();
break;
}
}
}
这是调用片段的Activity:
public class TabLayoutScreenActivity extends BaseActivity {
private TabLayout tabLayout;
private Bundle bundle;
//Bundle bundle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_screen);
tabLayout = (TabLayout) findViewById(R.id.tab_layout);
ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar); // actionBarSetUp(true);
// getSupportActionBar().setIcon(R.drawable.small_bee);
getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);
// getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// getSupportActionBar().setIcon(R.drawable.ic_launcher);
viewPager.setAdapter(new SectionPagerAdapter(getSupportFragmentManager()));
tabLayout.setupWithViewPager(viewPager);
ImageView foodlebee = (ImageView) findViewById(R.id.imageView2);
foodlebee.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent launchactivity = new Intent(TabLayoutScreenActivity.this,StartScreenActivity.class);
startActivity(launchactivity);
}
});
// bundle = getIntent().getExtras();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_login, menu);
if (PrefernceHelper.getBoolean(this, Commons.Constants.USERLOGGEDIN)) {
MenuItem item = menu.findItem(R.id.user_login);
item.setVisible(false);
invalidateOptionsMenu();
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.user_login) {
intentCall(SignInActivity.class, null, 0);
return true;
} else if (item.getItemId() == R.id.home) {
intentCall(StartScreenActivity.class, null, 0);
finish();
return true;
}
return false;
}
@Override
protected void onStart() {
super.onStart();
bundle = getIntent().getExtras();
int tabPostion = 0;
if (bundle != null)
tabPostion = bundle.getInt(Commons.Constants.TAB_POSITION, 0);
TabLayout.Tab tab = tabLayout.getTabAt(tabPostion);
tab.select();
}
public class SectionPagerAdapter extends FragmentPagerAdapter {
public SectionPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new ChefFragment();
case 1:
return new OrderFragment();
case 2:
return new BasketFragment();
case 3:
return new MoreFragment();
default:
return new ChefFragment();
}
}
@Override
public int getCount() {
return 4;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Chefs";
case 1:
return "Orders";
case 2:
return "Cart";
case 3:
return "More";
default:
return "Chef";
}
}
}
}
Just finish() onbackpressed 中的当前 activity 因此您将 return 到更多片段,因为前一个 activity 已经在返回堆栈中。您不需要再次启动之前的 activity。
而且你的代码是错误的..你正试图启动一个不可能的片段。这就是抛出此异常的原因。
像这样更改您的代码:
@Override
public void onBackPressed()
{
finish();
}