LinearLayout не выдвижной ящик? - PullRequest
0 голосов
/ 08 апреля 2020

Я прочитал эту проблему и до сих пор не могу понять, почему я получаю ту же ошибку.

У меня есть FrameLayout, который я позже буду использовать для некоторых Fragment, и LinearLayout, который описывает мой левый ящик, оба они обернуты в какой-то другой LinearLayout, который вы можете увидеть ниже в xml.

Я применил предложенные ответы, а именно, настройку для android:gravity="left" для LinearLayout, который описывает ящик, все та же ошибка.

Ошибка, которую я получаю:

 Caused by: java.lang.IllegalArgumentException: View android.widget.LinearLayout{77c3762 V.E...... ......I. 0,0-0,0 #7f070059 app:id/drawerPane} is not a sliding drawer

Я также пытался установить ListView android:layout_gravity="left", опять же ошибка.

  <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical">

    <!--toolbar-->

    <!--Navigation drawer; design-->
    <androidx.drawerlayout.widget.DrawerLayout
        android:id="@+id/drawerLayout"
        android:layout_width="240dp"
        android:layout_height="match_parent">

        <!--Main content view; Dynamicaly changed during runtime-->
        <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </FrameLayout>

        <LinearLayout
            android:id="@+id/drawerPane"
            android:gravity="left"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">


            <RelativeLayout
                android:id="@+id/profile_box"
                android:layout_height="150dp"
                android:layout_width="match_parent">

                <de.hdodenhof.circleimageview.CircleImageView
                    android:id="@+id/imageView"
                    android:layout_gravity="center"
                    android:layout_width="150dp"
                    android:layout_height="150dp"
                    android:src="@drawable/kotur"
                    android:layout_marginTop="10dp"
                    android:layout_marginLeft="9dp"
                    />
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_toEndOf="@id/imageView"
                    android:layout_centerVertical="true"
                    android:layout_marginLeft="10dp"
                    android:text="Kotur Aleksandar">

                </TextView>

            </RelativeLayout>

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:src="@drawable/profileui">
            </ImageView>

            <ListView
                android:id="@+id/drawer_list"
               android:layout_gravity="left"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:choiceMode="singleChoice"
                android:divider="@android:color/transparent"
                android:dividerHeight="0dp"
                android:background="#ffffff"/>

        </LinearLayout>

    </androidx.drawerlayout.widget.DrawerLayout>

</LinearLayout>

Вот Java код:

package ftn.sit.vezba4gui2.activities;

import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;

import java.util.ArrayList;

import ftn.sit.vezba4gui2.R;
import ftn.sit.vezba4gui2.adapters.DrawerListAdapter;
import ftn.sit.vezba4gui2.fragements.CinemaListFragment;
import model.NavItem;

public class MainActivity extends AppCompatActivity {

    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    private ActionBarDrawerToggle mDrawerToggle;
    private LinearLayout mDrawerPane;
    private CharSequence mTitle;
    private ArrayList<NavItem> mNavItems = new ArrayList<NavItem>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.i("TAG", "onCreateFromActivity()");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        prepareMenu(mNavItems);

        mDrawerLayout = findViewById(R.id.drawerLayout);
        mDrawerList = findViewById(R.id.drawer_list);

        mDrawerPane = findViewById(R.id.drawerPane); //contains ProfileBox i ListView
        DrawerListAdapter adapter = new DrawerListAdapter(this, mNavItems);


        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

        mDrawerList.setAdapter(adapter);

        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.string.drawer_open  , R.string.drawer_close) {
            //Called when a drawer has settled in a completely closed state
            @Override
            public void onDrawerClosed(View view) {
                super.onDrawerClosed(view);
                invalidateOptionsMenu();
            }
            //Called when a drawer has settled in a completely open state.
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                invalidateOptionsMenu();
            }
        };

        mDrawerLayout.addDrawerListener(mDrawerToggle);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);

        if (savedInstanceState == null){
            selectItemFromDrawer(0);
        }

    }




    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_toolbar, menu);
        return super.onCreateOptionsMenu(menu);
    }

/*    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        // If the nav drawer is open, hide action items related to the content view
        boolean drawerOpen = mDrawerLayout.isDrawerOpen(Gravity.LEFT);
       // menu.findItem(R.id.action_websearch).setVisible(!drawerOpen);
        return super.onPrepareOptionsMenu(menu);
    }*/

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_settings:
                return true;
            case R.id.action_refresh:
                return true;
            case R.id.action_new:
                return true;
        }

        return super.onOptionsItemSelected(item);
    }

    private void prepareMenu(ArrayList<NavItem> mNavItems ){
        mNavItems.add(new NavItem(getString(R.string.home), getString(R.string.home_long), R.drawable.ic_action_map));
        mNavItems.add(new NavItem(getString(R.string.places), getString(R.string.places_long), R.drawable.ic_action_place));
        mNavItems.add(new NavItem(getString(R.string.preferences), getString(R.string.preferences_long), R.drawable.ic_action_settings));
        mNavItems.add(new NavItem(getString(R.string.about), getString(R.string.about_long), R.drawable.ic_action_about));
        mNavItems.add(new NavItem(getString(R.string.sync_data), getString(R.string.sync_data_long), R.drawable.ic_action_refresh));
    }

    private class DrawerItemClickListener implements ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            selectItemFromDrawer(position);
        }
    }

    private void selectItemFromDrawer(int position) {
        switch (position){
            case 1:
                //
            case 2:
                //
            case 3:
                //
            case 4:
                //

        }

        mDrawerList.setItemChecked(position, true);
        mDrawerLayout.closeDrawer(mDrawerPane); //THIS LINE HERE LogCat is screaming at..

    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        // Pass any configuration change to the drawer toggls
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

}
...