10

我正在尝试按照本教程了解如何创建导航抽屉,但我不想在用户从抽屉列表中选择一个项目后使用片段来显示新内容。解决此问题的最佳方法是什么?我正在使用不实现片段的 API 10。

4

4 回答 4

18

首先,API 10 可以通过包含DrawerLayout. 这已经存在了两年多,DrawerLayout如果您不熟悉 Android 在过去两年中所拥有的东西,您不应该尝试弄乱新事物。

DrawerLayout其次,与碎片无关。引用您链接到的网页

当用户在抽屉的列表中选择一个项目时,系统会在提供给 setOnItemClickListener() 的 OnItemClickListener 上调用 onItemClick()。您在 onItemClick() 方法中执行的操作取决于您实现应用程序结构的方式。

如果你仔细阅读这两句话,你会发现它们都没有出现“片段”这个词。那是因为DrawerLayout不绑定到碎片。他们展示的示例代码使用了片段,但这仅仅是示例代码。

因此,欢迎您随心所欲地更新您的 UI:

  • FragmentTransaction使用 Android 支持包的片段的反向端口执行一个,或
  • 开始一项活动,或
  • 再次调用setContentView()您现有的活动,或
  • 否则修改现有活动的 UI(例如,隐藏/显示一些小部件)
于 2013-05-22T22:14:15.703 回答
3

没有碎片的基本抽屉

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);
    }
}

抽屉项目.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>

工具栏.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>
于 2017-03-04T07:46:06.977 回答
3

您也可以使用 LayoutInflater 类。

  1. 创建 xml 布局文件。
  2. 使用 findViewById 查找要更改的视图。
  3. 使用 .removeAllViews() 方法从找到的 View 中删除所有子项。
  4. 使用 .inflate() 方法将 xml 布局内容膨胀到找到的视图中。

这是一个例子:

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);
于 2016-09-12T23:52:11.413 回答
2

使用此代码

private void selectItem(int position) {


    // Locate Position
    switch (position) {
    case 0:
            startActivity(new Intent(this,TEST.class));
        break;
于 2014-03-16T03:58:55.703 回答