How can I use the Navigation Drawer without fragments?

后端 未结 4 1060
不思量自难忘°
不思量自难忘° 2021-02-06 02:32

I\'m trying to follow this tutorial on how to create a Navigation Drawer, but I don\'t want to use Fragments to show new content after the user select an item from the drawer li

相关标签:
4条回答
  • 2021-02-06 02:52

    You may use also LayoutInflater class.

    1. Create xml layout file.
    2. Find the View to change using findViewById.
    3. Remove all children from the found View using .removeAllViews() method.
    4. Inflate xml layout content into found View using .inflate() method.

    This is an example:

    LinearLayout layoutToChange = (LinearLayout)findViewById(R.id.layout_to_change);
    layoutToChange.removeAllViews();
    
    LayoutInflater inflater = LayoutInflater.from(this);
    LinearLayout newLayout = (LinearLayout)inflater.inflate(R.layout.new_layout, null);
    
    layoutToChange.addView(newLayout);
    
    0 讨论(0)
  • 2021-02-06 03:06

    basic drawer without fragment

    package xxxxxx;
    
    
    import android.content.res.Configuration;
    import android.os.Bundle;
    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.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.Toast;
    
    
    
    
    public class loginhome extends AppCompatActivity {
    
        private ListView mDrawerList;
        private DrawerLayout mDrawerLayout;
        private ArrayAdapter<String> mAdapter;
        private ActionBarDrawerToggle mDrawerToggle;
        private String mActivityTitle;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.loginhome);
            Toolbar topToolBar = (Toolbar)findViewById(R.id.toolbar);
            setSupportActionBar(topToolBar);
            mDrawerList = (ListView)findViewById(R.id.navList);
            mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
            mActivityTitle = getTitle().toString();
    
            addDrawerItems();
            setupDrawer();
    
    
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setHomeButtonEnabled(true);
    
        }
    
        private void addDrawerItems() {
            String[] osArray = { "Android", "iOS", "Windows", "OS X", "Linux" };
            mAdapter = new ArrayAdapter<String>(this, R.layout.drawer_items,R.id.label ,osArray);
            mDrawerList.setAdapter(mAdapter);
    
            mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Toast.makeText(loginhome.this, "Time for an upgrade!", Toast.LENGTH_SHORT).show();
                }
            });
        }
    
        private void setupDrawer() {
            mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close) {
    
                /** Called when a drawer has settled in a completely open state. */
                public void onDrawerOpened(View drawerView) {
                    super.onDrawerOpened(drawerView);
                    getSupportActionBar().setTitle("Navigation!");
                    invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
                }
    
                /** Called when a drawer has settled in a completely closed state. */
                public void onDrawerClosed(View view) {
                    super.onDrawerClosed(view);
                    getSupportActionBar().setTitle(mActivityTitle);
                    invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
                }
            };
    
            mDrawerToggle.setDrawerIndicatorEnabled(true);
            mDrawerLayout.setDrawerListener(mDrawerToggle);
        }
    
        @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);
            mDrawerToggle.onConfigurationChanged(newConfig);
        }
    
        @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, 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.action_help) {
                Toast.makeText(loginhome.this, "setting", Toast.LENGTH_LONG).show();
            }
            if(id == R.id.action_place){
                Toast.makeText(loginhome.this, "Refresh App", Toast.LENGTH_LONG).show();
            }
            if(id == R.id.action_search){
                Toast.makeText(loginhome.this, "Create Text", Toast.LENGTH_LONG).show();
            }
            // Activate the navigation drawer toggle
            if (mDrawerToggle.onOptionsItemSelected(item)) {
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    }
    

    draweritems.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">
    
    
            <TextView
                android:id="@+id/label"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#000"
                android:textSize="30sp"
                android:background="#D3D3D3">
            </TextView>
        </LinearLayout>
    

    toolbar.xml

    <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary"
            android:elevation="4dp"
            android:id="@+id/toolbar"
            android:theme="@style/ThemeOverlay.AppCompat.Dark"
    
    
            >
    
        </android.support.v7.widget.Toolbar>
    
    0 讨论(0)
  • 2021-02-06 03:07

    use this code

    private void selectItem(int position) {
    
    
        // Locate Position
        switch (position) {
        case 0:
                startActivity(new Intent(this,TEST.class));
            break;
    
    0 讨论(0)
  • 2021-02-06 03:11

    First, API 10 has access to fragments via the same Android Support package that contains the DrawerLayout. This has been around for over two years, and you should not be trying to mess with new things like DrawerLayout if you are unfamiliar with what Android has had for the past two years.

    Second, there is nothing with DrawerLayout that is tied to fragments. Quoting the Web page that you linked to:

    When the user selects an item in the drawer's list, the system calls onItemClick() on the OnItemClickListener given to setOnItemClickListener(). What you do in the onItemClick() method depends on how you've implemented your app structure.

    If you read those two sentences closely, you will see that the word "fragment" appears in neither of them. That is because DrawerLayout is not tied to fragments. The sample code they show uses fragments, but that is merely sample code.

    Hence, you are welcome to update your UI however you want:

    • execute a FragmentTransaction using the Android Support package's backport of fragments, or
    • start an activity, or
    • call setContentView() again on your existing activity, or
    • otherwise modify the UI of the existing activity (e.g., hide/show some widgets)
    0 讨论(0)
提交回复
热议问题