0

Я пытаюсь создать скользящий выдвижной ящик. Я хочу, чтобы текст отображался в основной части действия, но вместо этого он появляется внутри панели инструментов, и он говорит только, что это фрагмент 2, независимо от того, остановил ли я фрагмент, который должен сказать, что это фрагмент 1 или этот является фрагментом 2.Текст фрагмента, появляющийся на панели инструментов

Как я могу заставить его вытащить правильный фрагмент, а не всегда фрагмент 2, и как я могу сделать панель инструментов непрозрачной, с текстом, появляющимся под ней, а не в ней.

screenshot of when I first open the app

screenshot of when I click either of the fragments in the nav drawer

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       xmlns:app="http://schemas.android.com/apk/res-auto" 
       android:orientation="horizontal" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:id="@+id/drawer_layout" 
       tools:context="me.paxana.alerta.MainActivity"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="8dp" 
     android:minHeight="?attr/actionBarSize" 
     android:layout_alignParentTop="true" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/main_content" 
     android:layout_alignParentTop="true"> 
    </RelativeLayout> 

    <ListView 
     android:layout_width="200dp" 
     android:layout_height="match_parent" 
     android:id="@+id/lv_sliding_menu" 
     android:background="#FFFFFF" 
     android:choiceMode="singleChoice" 
     android:layout_gravity="start" /> 
</android.support.v4.widget.DrawerLayout> 

MainActivity.java

package me.paxana.alerta; 

import android.app.Activity; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.app.FragmentManager; 
import android.support.v7.app.ActionBar; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.app.Fragment; 
import android.content.Intent; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarActivity; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.MenuInflater; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.RelativeLayout; 
import android.support.v7.app.ActionBarActivity; 
import android.support.v7.widget.Toolbar; 

import com.parse.ParseUser; 

import java.util.ArrayList; 
import java.util.List; 

import butterknife.Bind; 
import butterknife.ButterKnife; 
import me.paxana.alerta.adapter.SlidingMenuAdapter; 
import me.paxana.alerta.fragment.Fragment1; 
import me.paxana.alerta.fragment.Fragment2; 
import me.paxana.alerta.fragment.Fragment3; 
import me.paxana.alerta.model.ItemSlideMenu; 

public class MainActivity extends AppCompatActivity { 
    public static final String TAG = MainActivity.class.getSimpleName(); 
    private List<ItemSlideMenu> listSliding; 
    private SlidingMenuAdapter adapter; 
    private ListView listViewSliding; 
    private DrawerLayout drawerLayout; 
    private android.support.v7.app.ActionBarDrawerToggle actionBarDrawerToggle; 
    private Toolbar mToolbar; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ButterKnife.bind(this); 


     ParseUser currentUser = ParseUser.getCurrentUser(); 
      if (currentUser == null) { 
       navigateToLogin(); 
      } 

     else { 
       Log.i(TAG, currentUser.getUsername()); 
      } 

     listViewSliding = (ListView)findViewById(R.id.lv_sliding_menu); 
     drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout); 
     listSliding = new ArrayList<>(); 
     //add item for sliding list 
     listSliding. add(new ItemSlideMenu(R.drawable.ic_action_settings, "Settings")); 
     listSliding.add(new ItemSlideMenu(R.drawable.ic_action_about, "About")); 
     listSliding.add(new ItemSlideMenu(R.drawable.ic_logout_black_48dp, "Log Out")); 
     adapter = new SlidingMenuAdapter(this, listSliding); 
     listViewSliding.setAdapter(adapter); 


     //display icon to open/close slider 
     mToolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(mToolbar); 
     assert getSupportActionBar() != null; 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     //item selected 
     listViewSliding.setItemChecked(0, true); 
     //close menu 
     drawerLayout.closeDrawer(listViewSliding); 
     //handle on item click 
     listViewSliding.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       if (position == 2) { 
        ParseUser.logOut(); 
        navigateToLogin(); 
       } else { 

        //replace fragment 
        replaceFragment(position); 
        //item selected 
        listViewSliding.setItemChecked(position, true); 
        //close menu 
        drawerLayout.closeDrawer(listViewSliding); 
       } 
      } 

     }); 

     actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_opened, R.string.drawer_closed) { 
      @Override 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
       invalidateOptionsMenu(); 
      } 

      @Override 
      public void onDrawerClosed(View drawerView) { 
       super.onDrawerClosed(drawerView); 
       invalidateOptionsMenu(); 
      } 
     }; 

     drawerLayout.setDrawerListener(actionBarDrawerToggle); 

    } 

    private void navigateToLogin() { 
     Intent intent = new Intent(this, LoginActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
     startActivity(intent); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if(actionBarDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 

     int itemId = item.getItemId(); 
     if (itemId == R.id.action_logout) { 
      ParseUser.logOut(); 
      navigateToLogin(); 

     } 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     actionBarDrawerToggle.syncState(); 
    } 
//create method replace fragment 
    private void replaceFragment(int pos) { 
     android.support.v4.app.Fragment fragment = null; 
     switch (pos) { 
      case 0: 
       fragment = new Fragment1(); 
        break; 
      case 1: 
       fragment = new Fragment2(); 
       break; 
      case 2: 
       fragment = new Fragment3(); 
       break; 
      default: 
       fragment = new Fragment1(); 
       break; 
     } 
     if(null != fragment) { 
      android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager(); 
      android.support.v4.app.FragmentTransaction transaction = fragmentManager.beginTransaction(); 
      transaction.replace(R.id.main_content, fragment); 
      transaction.addToBackStack(null); 
      transaction.commit(); 

     } 
    } 
} 

ответ

0

Я решил одну часть этой проблемы, хотя я не уверен, что использовал лучшие практики. Я добавил добавление в верхнюю часть main_content размером «? Attr/actionBarSize»

Но это все еще только отображение Это фрагмент 2, независимо от того, какой фрагмент я пытаюсь выбрать.

+0

aaand я нашел другую проблему. хреновая маленькая опечатка в моем фрагменте. –

0

Если вы хотите, чтобы содержание ниже панели инструментов, вы можете обернуть панель и содержание в одном макете, как:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    > 
    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:minHeight="?attr/actionBarSize" 
     android:layout_alignParentTop="true" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
     /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/main_content" 
     android:background="#8000ff00" 
     > 
    </RelativeLayout> 
</LinearLayout> 

Кроме того, если вы используете Android Studio, создавая панель навигации активность с помощью мастера является лучшим способом для обеспечения что все работает правильно.

+0

как 'android: layout_alignParentTop =" true "' будет применяться здесь, поскольку вы используете linearLayout? – k0sh

+0

много вещей в моем классе mainactivity полагаются на макет, являющийся DrawerLayout –

+0

@ k0sh, я согласен android: layout_alignParentTop = "true" not effect – dolphin

Смежные вопросы