我在 MainActivity.class 中托管了 11 个 Fragment,这些 Fragment 使用 RecyclerView 来显示项目。这些项目是可点击的,当它们被点击时,项目解析 DetailActivity.class 中的数据。MainActivity 是父活动。我想实现 onBackPressed(); 这样当用户单击详细活动中的 homeBack 按钮时,他们将返回到上一个 Fragment(MianActivity 中的上一个位置)
MainActivity.class
public class MainActivity extends AppCompatActivity implements MaterialTabListener, View.OnClickListener, FragmentManager.OnBackStackChangedListener {
private static final int JOB_ID = 100;
private Toolbar toolbar;
private ViewPager mPager;
private MaterialTabHost mTabHost;
private SlidingTabLayout mTabs;
private ViewPagerAdapter adapter;
public static final int MOVIES_SEARCH_RESULTS = 1;
public static final int MOVIEE_HITS = 0;
public static final int MOVIES_UPCOMING = 2;
public static final int NEWS_OPINION = 3;
public static final int NEWS_CULTURE = 4;
public static final int NEWS_BUSINESS = 5;
public static final int NEWS_LIFESTYLE = 6;
public static final int NEWS_FASHION = 7;
public static final int NEWS_ENVIRONMENT = 8;
public static final int NEWS_TECH = 9;
public static final int NEWS_TRAVEL = 10;
public static final int TAB_COUNT = 11;
private JobScheduler mJobScheduler;
Realm mRealm;
FragmentManager mFragmentManager;
private static final String TAG_SORT_NAME = "sortName";
private static final String TAG_SORT_DATE = "sortDate";
private static final String TAG_SORT_RATINGS = "sortRatings";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mJobScheduler = JobScheduler.getInstance(this);
mRealm = Realm.getDefaultInstance();
toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
NavigationDrawerFragment drawerFragment = (NavigationDrawerFragment)
getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar);
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
mTabs = (SlidingTabLayout) findViewById(R.id.tabs);
/*mTabHost = (MaterialTabHost) findViewById(R.id.materialTabHost);*/
adapter = new ViewPagerAdapter(getSupportFragmentManager());
mPager.setAdapter(adapter);
mTabs.setViewPager(mPager);
mFragmentManager=getSupportFragmentManager();
mFragmentManager.addOnBackStackChangedListener(this);
Fragment fragment = new Business();
// if you don't run on prior to Android 3.0 use getFragmentManager();
mFragmentManager.beginTransaction().replace(R.id.businessFragment, fragment).addToBackStack(null).commit();
// R.id.frame_container is the id of FrameLayout in activity_main.xml
}
@Override
public void onBackPressed() {
if(mFragmentManager.getBackStackEntryCount() == 0){
finish();
}else{
super.onBackPressed();
}
}
public void constructJob() {
JobInfo.Builder builder = new JobInfo.Builder(JOB_ID, new ComponentName(this, MyService.class));
}
private void buildFAB() {
// in Activity Context
ImageView icon = new ImageView(this); // Create an icon
icon.setImageResource(R.drawable.ic_action_new);
FloatingActionButton actionButton = new FloatingActionButton.Builder(this)
.setContentView(icon)
.setBackgroundDrawable(R.drawable.selector_button_red)
.build();
// repeat many times:
ImageView iconSortName = new ImageView(this);
iconSortName.setImageResource(R.drawable.ic_action_alphabets);
ImageView iconSortDate = new ImageView(this);
iconSortDate.setImageResource(R.drawable.ic_action_calendar);
ImageView iconSortRatings = new ImageView(this);
iconSortRatings.setImageResource(R.drawable.ic_action_important);
// set background for all the buttons
SubActionButton.Builder itemBuilder = new SubActionButton.Builder(this);
itemBuilder.setBackgroundDrawable(getResources().getDrawable(R.drawable.selector_sub_button_gray));
// build the sub buttons
SubActionButton buttonSortName = itemBuilder.setContentView(iconSortName).build();
SubActionButton buttonSortDate = itemBuilder.setContentView(iconSortDate).build();
SubActionButton buttonSortRatings = itemBuilder.setContentView(iconSortRatings).build();
buttonSortName.setTag(TAG_SORT_NAME);
buttonSortDate.setTag(TAG_SORT_DATE);
buttonSortRatings.setTag(TAG_SORT_RATINGS);
buttonSortName.setOnClickListener(this);
buttonSortDate.setOnClickListener(this);
buttonSortRatings.setOnClickListener(this);
//Add the sub buttons to the main floating action button
FloatingActionMenu actionMenu = new FloatingActionMenu.Builder(this)
.addSubActionView(buttonSortName)
.addSubActionView(buttonSortDate)
.addSubActionView(buttonSortRatings)
// ...
.attachTo(actionButton)
.build();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings:
Toast.makeText(this, "Hey you just hit " + item.getTitle(), Toast.LENGTH_SHORT).show();
return true;
case android.R.id.home:
getSupportFragmentManager().popBackStack();
return true;
}
return onOptionsItemSelected(item);
}
@Override
public void onTabSelected(MaterialTab tab) {
mPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabReselected(MaterialTab tab) {
}
@Override
public void onTabUnselected(MaterialTab tab) {
}
@Override
public void onClick(View v) {
//call instantiate item since getItem may return null depending on whether the PagerAdapter is of type FragmentPagerAdapter or FragmentStatePagerAdapter
Fragment fragment = (Fragment) adapter.instantiateItem(mPager, mPager.getCurrentItem());
if (fragment instanceof SortListener) {
if (v.getTag().equals(TAG_SORT_NAME)) {
//call the sort by name method on any Fragment that implements sortlistener
((SortListener) fragment).onSortByName();
}
if (v.getTag().equals(TAG_SORT_DATE)) {
//call the sort by date method on any Fragment that implements sortlistener
((SortListener) fragment).onSortByDate();
}
if (v.getTag().equals(TAG_SORT_RATINGS)) {
//call the sort by ratings method on any Fragment that implements sortlistener
((SortListener) fragment).onSortByRatings();
}
}
}
@Override
public void onBackStackChanged() {
/* if (getSupportFragmentManager().getBackStackEntryCount()==1){
finish();
}else {
super.onBackPressed();
}*/
}
/* private void replaceFragment(Fragment fragment) {
String backStackName = fragment.getClass().getName();
boolean fragmentPopped = mFragmentManager.popBackStackImmediate(backStackName, 0);
if (!fragmentPopped) {
fragmentTransaction.replace(R.id.container, fragment);
fragmentTransaction.addToBackStack(backStackName);
fragmentTransaction.commit();
}
}*/
class ViewPagerAdapter extends FragmentStatePagerAdapter {
/*private String tabs[] = new String[]{"Tab 1 ", "Tab 2 ", " Tab 3"};*/
/* int icons[] = {R.drawable.ic_home_black_24dp,
R.drawable.ic_library_books_black_24dp,
R.drawable.ic_person_black_24dp,
};*/
String[] tabText;
FragmentManager fragmentManager;
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
tabText = getResources().getStringArray(R.array.tabs);
fragmentManager = fm;
}
@Override
public Fragment getItem(int num) {
Fragment fragment = null;
switch (num) {
case MOVIES_SEARCH_RESULTS:
fragment = FragmentSearch.newInstance("", "");
break;
case MOVIEE_HITS:
fragment = FragmentBoxOffice.newInstance("", "");
break;
case MOVIES_UPCOMING:
fragment = FragmentUpcoming.newInstance("", "");
break;
case NEWS_OPINION:
fragment = Opinion.newInstance("", "");
break;
case NEWS_CULTURE:
fragment = Culture.newInstance("", "");
break;
case NEWS_BUSINESS:
fragment = Business.newInstance("", "");
break;
case NEWS_LIFESTYLE:
fragment = Lifestyle.newInstance("", "");
break;
case NEWS_FASHION:
fragment = Fashion.newInstance("", "");
break;
case NEWS_ENVIRONMENT:
fragment = Environment.newInstance("", "");
break;
case NEWS_TECH:
fragment = Tech.newInstance("", "");
break;
case NEWS_TRAVEL:
fragment = Travel.newInstance("", "");
break;
}
return fragment;
}
@Override
public int getCount() {
return TAB_COUNT;
}
@Override
public CharSequence getPageTitle(int position) {
return tabText[position];
}
/* private Drawable getIcon(int position) {
return getResources().getDrawable(icons[position]);
}*/
}
}
DetailActivity.class
public class DetailActivity extends AppCompatActivity {
private Toolbar mToolbar;
private ViewPager mPager;
private ViewGroup mCointainerTooobar;
private VolleySingleton volleySingleton;
private ImageLoader imageLoader;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
mToolbar = (Toolbar) findViewById(R.id.toolbarf);
setSupportActionBar(mToolbar);
final CollapsingToolbarLayout collapsingToolbarLayout =
(CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar_layout);
Bundle extra = getIntent().getExtras();
String detailsSectionId = extra.getString("SectionId");
collapsingToolbarLayout.setTitle(detailsSectionId.toString().trim());
ImageView flexibleHeader = (ImageView) findViewById(R.id.ivProfileImage);
mCointainerTooobar = (ViewGroup) findViewById(R.id.container_app_bar);
volleySingleton = VolleySingleton.getsInstance();
imageLoader = volleySingleton.getImageLoader();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
displayingDetails();
/* Bitmap mBitmap= BitmapFactory.decodeResource(getResources(), R.id.ivProfileImage);
Palette.from(mBitmap).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
String mutecolor;
collapsingToolbarLayout.setContentScrim(Palette.g);
}
});*/
}
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
public void displayingDetails() {
// seactionId
Bundle extra = getIntent().getExtras();
String detailsSectionId = extra.getString("SectionId");
TextView sectionText = (TextView) findViewById(R.id.DetailsSectionId);
sectionText.setText(detailsSectionId);
// Title
Bundle titleText = getIntent().getExtras();
String title = titleText.getString("title");
TextView titleView = (TextView) findViewById(R.id.DetailNews_title);
titleView.setText(title);
// Thumbnail
Bundle mUrlThumbnail = getIntent().getExtras();
String urlThumbnail = mUrlThumbnail.getString("UrlThumbnail");
final ImageView urlThumbnailView = (ImageView) findViewById(R.id.ivProfileImage);
if (urlThumbnail != null) {
imageLoader.get(urlThumbnail, new ImageLoader.ImageListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
@Override
public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
urlThumbnailView.setImageBitmap(response.getBitmap());
}
});
urlThumbnailView.setBackgroundDrawable(Drawable.createFromPath(urlThumbnail));
}
// Body
Bundle mBody = getIntent().getExtras();
/*String body= Html.fromHtml(mBody.getString("body"));*/
String body = mBody.getString("body");
TextView bodyView = (TextView) findViewById(R.id.DetailsNews_description);
bodyView.setText(Html.fromHtml(body));
bodyView.setMaxLines(1000000);
}
/* @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case android.R.id.home:
L.t(DetailActivity.this, "this is the details activity");
getFragmentManager().popBackStack();
return true;
}
return super.onOptionsItemSelected(item);
}*/
}
我如何实现此功能,任何解决方案都将受到高度赞赏..