使用导航绘图视图中的onBackPressed转到主活动



我正在使用一个带有片段的mainactivity。但当我反向按压时,应用程序关闭。我希望每当按下后退按钮时,应用程序都会转到主活动页面,从中可以看到它正在处理的片段


public
class MainActivity extends AppCompatActivity {
private AdView mAdView;
private AdView mAdView2;
private static final String TAG = MainActivity.class.getSimpleName();
private RecyclerView firstrecyclerView;
private RecyclerView secondrecyclerView;
//youtube player fragment
private YouTubePlayerSupportFragmentX youTubePlayerFragment;
private ArrayList<String> youtubeVideoArrayList;
private ArrayList<String> secondyoutubeVideoArrayList;
ArrayList<itemModel> items;
ArrayList<itemModel2> items2;
String[] iconName = {"TV9 Gujrati","NDTV india","Republic Bharat"};
String[] iconName2 = {"Al Jazeera","Sky News","CNA Singapore","Indus Live","RT News"};
//youtube player to play video when new video selected
private YouTubePlayer youTubePlayer;
//NavigationView
private DrawerLayout mDrawer;
private ActionBarDrawerToggle drawerToggle;
private NavigationView nvDrawer;
private androidx.appcompat.widget.Toolbar toolbar;
private InterstitialAd interstitialAd;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
generateDummyVideoList();
initializeYoutubePlayer();
setUpRecyclerView();
populateRecyclerView();
// This will display an Up icon (<-), we will replace it with hamburger later
Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
// Find our drawer view
mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerToggle = setupDrawerToggle();
drawerToggle.setDrawerIndicatorEnabled(true);
drawerToggle.syncState();
// Tie DrawerLayout events to the ActionBarToggle
mDrawer.addDrawerListener(drawerToggle);
// Find our drawer view
nvDrawer = (NavigationView) findViewById(R.id.nvView);
// Setup drawer view
setupDrawerContent(nvDrawer);
MobileAds.initialize(this, "ca-app-pub-9681539518823208~9907474172");
interstitialAd = new InterstitialAd(this);
interstitialAd.setAdUnitId("ca-app-pub-9681539518823208/1204338718");
AdRequest request = new AdRequest.Builder().build();
interstitialAd.loadAd(request);
interstitialAd.setAdListener(new AdListener(){
public void onAdLoaded(){
if (interstitialAd.isLoaded()) {
interstitialAd.show();
}
}
});
MobileAds.initialize(this, new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus initializationStatus) {
}
});
mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
mAdView2 = findViewById(R.id.adView2);
AdRequest adRequest2 = new AdRequest.Builder().build();
mAdView.loadAd(adRequest2);

}
/**
* initialize youtube player via Fragment and get instance of YoutubePlayer
*/
private void initializeYoutubePlayer() {
youTubePlayerFragment = (YouTubePlayerSupportFragmentX) getSupportFragmentManager().findFragmentById(R.id.youtube_player_fragment);

if (youTubePlayerFragment == null)
return;
youTubePlayerFragment.initialize(Constants.DEVELOPER_KEY, new YouTubePlayer.OnInitializedListener() {
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player,
boolean wasRestored) {
if (!wasRestored) {
youTubePlayer = player;

//set the player style default
youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
//cue the 1st video by default
youTubePlayer.cueVideo(youtubeVideoArrayList.get(0));
youTubePlayer.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE);
}
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider arg0, YouTubeInitializationResult arg1) {
//print or show error if initialization failed
Log.e(TAG, "Youtube Player View initialization failed");
}
});
}
/**
* setup the recycler view here
*/
private void setUpRecyclerView() {
firstrecyclerView = findViewById(R.id.first_recycler_view);
firstrecyclerView.setHasFixedSize(true);
items = new ArrayList<>();
//Horizontal direction recycler view
LinearLayoutManager firstlinearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
firstrecyclerView.setLayoutManager(firstlinearLayoutManager);
firstrecyclerView.setItemAnimator(new DefaultItemAnimator());
for (int i = 0; i < iconName.length; i++) {
itemModel itemModel = new itemModel(iconName[i], youtubeVideoArrayList.get(i));
items.add(itemModel);
}
secondrecyclerView=findViewById(R.id.second_recycler_view);
secondrecyclerView.setHasFixedSize(true);
items2 = new ArrayList<>();
LinearLayoutManager secondlinearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
secondrecyclerView.setLayoutManager(secondlinearLayoutManager);
secondrecyclerView.setItemAnimator(new DefaultItemAnimator());
for (int i = 0; i < iconName2.length; i++) {
itemModel2 itemModel2 = new itemModel2(iconName2[i], secondyoutubeVideoArrayList.get(i));
items2.add(itemModel2);
}
}
/**
* populate the recycler view and implement the click event here
*/
private void populateRecyclerView() {
final CustomAdapter adapterf = new CustomAdapter(this, items);
firstrecyclerView.setAdapter(adapterf);
//set click event
firstrecyclerView.addOnItemTouchListener(new RecyclerViewOnClickListener(this, new RecyclerViewOnClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
if (youTubePlayerFragment != null && youTubePlayer != null) {
//update selected position
adapterf.setSelectedPosition(position);
//load selected video
youTubePlayer.cueVideo(youtubeVideoArrayList.get(position));
}
}
}));
final CustomAdapter2 adapterf2 = new CustomAdapter2(this, items2);
secondrecyclerView.setAdapter(adapterf2);
//set click event
secondrecyclerView.addOnItemTouchListener(new RecyclerViewOnClickListener2(this, new RecyclerViewOnClickListener2.OnItemClickListener() {
@Override
public void onItemClick(View view2, int position) {
if (youTubePlayerFragment != null && youTubePlayer != null) {
//update selected position
adapterf2.setSelectedPosition(position);
//load selected video
youTubePlayer.cueVideo(secondyoutubeVideoArrayList.get(position));
}
}
}));
}

/**
* method to generate dummy array list of videos
*/
private void generateDummyVideoList() {
youtubeVideoArrayList = new ArrayList<>();
//get the video id array from strings.xml
String[] videoIDArray = getResources().getStringArray(R.array.video_id_array);
//add all videos to array list
Collections.addAll(youtubeVideoArrayList, videoIDArray);
secondyoutubeVideoArrayList = new ArrayList<>();
//get the video id array from strings.xml
String[] secondvideoIDArray = getResources().getStringArray(R.array.secondvideo_id_array);
//add all videos to array list
Collections.addAll(secondyoutubeVideoArrayList, secondvideoIDArray);
}
private ActionBarDrawerToggle setupDrawerToggle() {
return new ActionBarDrawerToggle(this, mDrawer, toolbar, R.string.drawer_open,  R.string.drawer_close);
}
public boolean onOptionsItemSelected(MenuItem item) {
if (drawerToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
private void setupDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
selectDrawerItem(menuItem);
return true;
}
});
}
private void selectDrawerItem(MenuItem menuItem) {
Fragment fragment = null;
Class fragmentClass;
switch(menuItem.getItemId()) {
case R.id.menu_1:
fragmentClass = Fragment1.class;
break;
default:
throw new IllegalStateException("Unexpected value: " + menuItem.getItemId());
}
try {
fragment = (Fragment) fragmentClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}

// Insert the fragment by replacing any existing fragment
FragmentManager fragmentManager = getSupportFragmentManager();
assert fragment != null;
fragmentManager.beginTransaction().replace(R.id.flContent, fragment).addToBackStack().commit();
// Highlight the selected item has been done by NavigationView
menuItem.setChecked(false);
// Set action bar title
setTitle(menuItem.getTitle());
// Close the navigation drawer
mDrawer.closeDrawers();
}
@Override
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
@Override
public void onBackPressed() {
if (mDrawer.isDrawerOpen(GravityCompat.START)) {
mDrawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
}

我尝试了Backstack,但我不想去上一个片段,而是去主要活动。我添加了主菜单项并为其分配了mainactivity,但当从导航抽屉中按下它时,应用程序就会崩溃。

为什么不使用意向?


@Override
public void onBackPressed() {
if(!drawerIsOpen()) {
startActivity(new Intent(this, MainActivity.class));
finish();
} else
closeDrawer();

}

最新更新