android - fragment 未显示

标签 android android-fragments navigation-drawer android-fragmentactivity android-navigation

所以我一直在根据我在教程中找到的代码构建我的抽屉导航。但是我的 fragment 不会切换。笔记本电脑已关闭并正在使用 AIDE。谁能告诉我怎么了?猜猜这是我的 setonitemclicklistener。

{

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.activity_main);

    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 = { "Hello", "Watch Ads", "TapJoy" };
    mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, osArray);
    mDrawerList.setAdapter(mAdapter);

    mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id)
            {
                selectView(position);
            }
        });
}

private void selectView(int position)
{
    Fragment fragment = null;

    switch (position)
    {
        case 0: 
            fragment = new HelloFragment();
            break;
        case 1 :
            fragment = new AdFragment();
            break;
        case 2:
            fragment = new TapJoyFragment();
            break;

    }   
    if (fragment == null)
    {
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();

        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        mDrawerLayout.closeDrawer(mDrawerList);
    }   }

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("How will you earn?");
            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_main, 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_settings)
    {

        return true;
    }

    // Activate the navigation drawer toggle
    if (mDrawerToggle.onOptionsItemSelected(item))
    {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

最佳答案

你好伙计!

private void selectView(int position)
        {
            Fragment fragment = null;

            switch (position)
            {
                case 0: 
                    fragment = new HelloFragment();
                    break;
                case 1 :
                    fragment = new AdFragment();
                    break;
                case 2:
                    fragment = new TapJoyFragment();
                    break;

            }   
            **if (fragment == null)**
            {
                FragmentManager fragmentManager = getFragmentManager();
                fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();

                mDrawerList.setItemChecked(position, true);
                mDrawerList.setSelection(position);
                mDrawerLayout.closeDrawer(mDrawerList);
            }   }

这个“if”语句总是false 如果你把它包装在switch(position) 之前, fragment 怎么会是空的。这就是为什么你的 fragment 交易永远不会实现。

关于android - fragment 未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30272144/

相关文章:

android - webview 不能在果冻 bean 上使用 ajax jquery

android - 从 Eclipse 运行 Android Activity 单元测试的问题

android.content.res.Resources$NotFoundException : File res/mipmap-xhdpi-v4/ic_copyright_black_24dp. png 来自 xml 类型 xml 资源 ID #0x7f0d0007

android - 获取Android中抽屉导航的当前选定项

android - 以完整图像为背景的自定义 NavigationDrawer

java - 为什么java中无法提取Json数组?

android - addToBackStack 后的 popBackStack() 不起作用

android - float 操作按钮锚定 View 创建时的更改

android - 更改抽屉导航项目语言

android - 带有水平包裹的 textViews 的 ListView 动态填充