2017-10-15 4 views
-1

私はアプリで実装したNavigationDrawerに問題があります。私が行ったことは、NavigationDrawerアクティビティを他のアクティビティに拡張することで、正常に動作します。私はそれを行うにためつもり何ナビゲーションドロワーは選択と移行の問題を覚えていません

は引き出しの中のリンクをクリックする上で、新たな活動を開くことですが、私が起こることを望んでいない2つの処理が行われます

  1. ナビゲーションドロワーに開始しますクローズすると、新しいアクティビティが開始され、画面上のアクティビティが背景に崩壊し、新しいアクティビティが下からスライドするように、これは終了します。新しいアクティビティの情報が表示される前に、引き出しが閉じて画面が点滅するように、正しく転送するにはどうすればよいですか?
  2. ナビゲーション・ドロワーでの選択は正しくありません。 「ニュースフィード」ページで「ハイスコア」を選択すると、アクティビティは切り替わりますが、選択は「ニュースフィード」にとどまります。ページ切り替えで選択をどのように切り替えることができますか?

navigationDrawerActivity.java

import android.content.Intent; 
import android.os.Bundle; 
import android.support.annotation.NonNull; 
import android.support.design.widget.NavigationView; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.MenuItem; 
import android.widget.FrameLayout; 

public class navigationDrawerActivity extends AppCompatActivity implements 
NavigationView.OnNavigationItemSelectedListener { 

private DrawerLayout mDrawerLayout; 
private ActionBarDrawerToggle mToggle; 
protected DrawerLayout fullLayout; 
protected FrameLayout actContent; 
private Toolbar mToolbar; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public void setContentView(final int layoutResID) { 

    fullLayout = (DrawerLayout) getLayoutInflater().inflate(R.layout.activity_navigation_drawer, null); 
    actContent = (FrameLayout) fullLayout.findViewById(R.id.act_content); 

    // This code combines this activity along with others for the NavigationDrawer to be global 
    getLayoutInflater().inflate(layoutResID, actContent, true); 
    super.setContentView(fullLayout); 

    //NavigationDrawer settings 
    mToolbar = (Toolbar) findViewById(R.id.nav_action); 
    setSupportActionBar(mToolbar); 

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); 
    mToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 

    mDrawerLayout.addDrawerListener(mToggle); 
    mToggle.syncState(); 

    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    setNavigationViewListener(); 

} 

//Enables the NavDrawer icon to work 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    if (mToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

//Handles navigation view item clicks 
@Override 
public boolean onNavigationItemSelected(@NonNull MenuItem item) { 

    switch (item.getItemId()) { 

     case R.id.nav_newsFeed: { 
      Intent intent = new Intent (this, newsfeedActivity.class); 
      startActivity(intent); 
      mDrawerLayout.closeDrawer(GravityCompat.START); 
      break; 
     } 

     case R.id.nav_hiScores: { 
      Intent intent = new Intent (this, hiscoresActivity.class); 
      startActivity(intent); 
      mDrawerLayout.closeDrawer(GravityCompat.START); 
      break; 
     } 
    } 

    //close navigation drawer 
    mDrawerLayout.closeDrawer(GravityCompat.START); 
    return true; 
} 

private void setNavigationViewListener() { 
    NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView); 
    navigationView.setNavigationItemSelectedListener(this); 

    } 
} 

EDIT:

だから私は、コードを少し周りに微調整した後、問題を解決するために管理し、基本的に私は私の活動のそれぞれにonResumeを追加しました。そのonResume内で、ナビゲーションビューで選択された項目を設定し、overridePendingTransitionを使用して、移行問題を止めます。ハイスコ​​アを表示するアクティビティで

答えて

0

は、行うことのonCreate()内:

navigationView.setCheckedItem(R.id.nav_hiScores); 

P.S.

単一の操作でフラグメントを変更するには、ナビゲーションドロワーを使用する必要があります。複数のアクティビティを切り替えるときには使用しないでください。

+0

返信用のおかげで、私はあなたが示唆したものを試してみたとアプリが起動時にクラッシュした... onNavigationItemSelectedのケースの下にそれを入れてみましたとアプリが..任意の提案をリンクをタップする上で墜落しましたか? 断片化部分については、私はそれを読んだが使用しなかったが、後で試してみるかもしれない。 – bayobayo

+0

@bayobayo logCatとは何か? – Valentun

0

NavigationViewまたはNavigationDrawerを使用してアクティビティを変更することはできますが、現在のアクティビティ内でナビゲーションの選択位置を設定して、アクティビティを開始する意図でintデータを送信し、そのインデックスでチェック項目を設定できます。

+0

返信いただきありがとうございます、私は'これを直ちに試みましたが、リンクをタップしてアプリがクラッシュしました。 – bayobayo

+0

そうなら、クラッシュしないでください。あなたは、現在選択されているアイテムの正確な位置をインテントでナビゲーション・ドロワーに送り、新しいアクビビティー・ナビゲーション・ドロワーにチェック・アイテムをそのインデックスに設定します。それは複雑ではないので、あなたはなぜそれがクラッシュするあなたのlogcatを確認する必要があります。インテントでデータを送信したり、nullのナビゲーション・ドロワーまたはナビゲーション・ビューのチェックされた位置を設定すると、クラッシュすることはありません。 – Thracian

関連する問題