Я прочитал эту проблему и до сих пор не могу понять, почему я получаю ту же ошибку.
У меня есть 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);
}
}