2

Я реализовал следующий код, но когда я запустил приложение и нажал на элемент в Drawer, ничего не произошло. Я предполагаю, что это проблема, связанная с слушателем, но я не мог понять, как ее исправить. или, возможно, другая проблема!новый фрагмент нельзя загрузить, щелкнув элемент «Ящик» в Android Studio

раз я нажимаю на один пункт единственное случиться следующие две строки в LogCat:

01-12 03:14:26.606 1565-1565/? I/LatinIME: Starting input. Cursor position = -1,-1 
01-12 03:14:29.601 1565-1565/? I/LatinIME: Starting input. Cursor position = 0,0 

здесь код:

public class Welcome extends AppCompatActivity { 
    private DrawerLayout mDrawer,dlDrawer; 
    private NavigationView nvDrawer; 
    private ActionBarDrawerToggle drawerToggle; 

    private Toolbar toolbar; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.welcome); 

     // Set a Toolbar to replace the ActionBar. 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     // Find our drawer view 
     dlDrawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawerToggle = setupDrawerToggle(); 

     // Tie DrawerLayout events to the ActionBarToggle 
     dlDrawer.setDrawerListener(drawerToggle); 

     nvDrawer = (NavigationView) findViewById(R.id.nvView); 
     // Setup drawer view 
     setupDrawerContent(nvDrawer); 

     FragmentTransaction tx = getSupportFragmentManager().beginTransaction(); 
     tx.replace(R.id.drawer_layout, new EditPersonal()); 
     tx.commit(); 
    } 

    private void setupDrawerContent(NavigationView navigationView) { 
     navigationView.setNavigationItemSelectedListener(
       new NavigationView.OnNavigationItemSelectedListener() { 
        @Override 
        public boolean onNavigationItemSelected(MenuItem menuItem) { 
         selectDrawerItem(menuItem); 
         return true; 
        } 
       }); 
    } 
    private ActionBarDrawerToggle setupDrawerToggle() { 
     return new ActionBarDrawerToggle(this, dlDrawer, toolbar, R.string.drawer_open, R.string.drawer_close); 
    } 

    public void selectDrawerItem(MenuItem menuItem) { 
     // Create a new fragment and specify the planet to show based on 
     // position 
     Fragment fragment = null; 

     Class fragmentClass; 
     switch(menuItem.getItemId()) { 
      case R.id.nav_first_fragment: 
       fragmentClass = EditPersonal.class; 
       break; 
      case R.id.nav_second_fragment: 
       fragmentClass = Chronogram.class; 
       break; 
      case R.id.nav_third_fragment: 
       fragmentClass = BloodTest.class; 
       break; 
      case R.id.nav_forth_fragment: 
       fragmentClass = GlucoseTest.class; 
       break; 
      case R.id.nav_fifth_fragment: 
       fragmentClass = SendRecord.class; 
       break; 
      case R.id.nav_sixth_fragment: 
       fragmentClass = ReviewLogin.class; 
       break; 
      case R.id.nav_seventh_fragment: 
       fragmentClass = SignOut.class; 
       break; 
      default: 
       fragmentClass = EditPersonal.class; 
     } 

     try { 
      fragment = (Fragment) fragmentClass.newInstance(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     // Insert the fragment by replacing any existing fragment 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.flContent,fragment).commit(); 

     // Highlight the selected item, update the title, and close the drawer 
     menuItem.setChecked(true); 
     setTitle(menuItem.getTitle()); 
     mDrawer.closeDrawers(); 
    } 
    // ... 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if (drawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    // Make sure this is the method with just `Bundle` as the signature 
    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     drawerToggle.syncState(); 
    } 
    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     // Pass any configuration change to the drawer toggles 
     drawerToggle.onConfigurationChanged(newConfig); 
    } 
} 

экран приложение выстрел:

enter image description here

ответ

0

Вы пробовали поместить журналы в свой код, чтобы см., где логика течет или не проходит?

Например, внутри оператора switch попробуйте увидеть, действительно ли menuItem.getItemId() соответствует вашим операторам case. Это поможет узнать, действительно ли ваш слушатель является проблемой или если это просто не соответствует случаям. Или это может быть проблемой с вашим менеджером фрагментов.

Отъезд http://developer.android.com/reference/android/util/Log.html. Вы должны иметь возможность видеть журналы в logcat. Удачи!

1

в коммутаторе случае, попробовать что-то вроде этого:

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 

case R.id.nav_first_fragment: 

    EditPersonal editPersonal= new EditPersonal(); 
    fragmentTransaction.replace(R.id.flContent, editPersonal); 
    fragmentTransaction.commit(); 
    break; 

делать это на других случаях.

+0

К сожалению, пока не работает. – Jasmine

0

В основном я изменил код с помощью Activity (Активность навигационного ящика) самой студии Android. так что вот код:

public class Welcome extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main2); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.drawer_open, R.string.drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 
     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
    } 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.review_login_listview, menu); 
     return true; 
    } 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.menu_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 
     FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 

     if (id == R.id.nav_first_fragment) { 
      // Handle the camera action 
     } 
     else { 

     } 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 
}