如何将工具栏添加到android中的片段?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将工具栏添加到android中的片段?相关的知识,希望对你有一定的参考价值。

我有一个名为HomeFragment.java的片段,它扩展了Fragment类。

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.android.test.R;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;

public class HomeFragment extends Fragment {

    private Toolbar toolbar;
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_profile,container,false);
        toolbar = (Toolbar) view.findViewById(R.id.toolbar);
        getActivity().setSupportActionController(toolbar);
        //setSupportActionBar(toolbar);
        return view;
    }
}

但我收到错误:

getActivity().setSupportActionController(toolbar)

错误是:

Cannot resolve method 'setSupportActionController(android.support.v7.widget.Toolbar)'

并且有一个条件是我无法将HomeFragment扩展到AppCombatActivity。它必须仅作为片段保留,即公共类HomeFragment扩展片段。

条件是因为这段代码中的第5行

    Runnable mPendingRunnable = new Runnable() {
        @Override
        public void run() {
            // update the main content by replacing fragments
            Fragment fragment = getHomeFragment();
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.setCustomAnimations(android.R.anim.fade_in,
                    android.R.anim.fade_out);
            fragmentTransaction.replace(R.id.frame, fragment, CURRENT_TAG);
            fragmentTransaction.commitAllowingStateLoss();
        }
    };

    // If mPendingRunnable is not null, then add to the message queue
    if (mPendingRunnable != null) {
        mHandler.post(mPendingRunnable);
    }

    // show or hide the fab button
    toggleFab();

    //Closing drawer on item click
    drawer.closeDrawers();

    // refresh toolbar menu
    invalidateOptionsMenu();
}

我的getHomeFragment()是:

    private Fragment getHomeFragment() {
    switch (navItemIndex) {
        case 0:
            // home
            HomeFragment homeFragment = new HomeFragment();
            return homeFragment;
        case 1:
            // photos
            PhotosFragment photosFragment = new PhotosFragment();
            return photosFragment;
        case 2:
            // movies fragment
            MoviesFragment moviesFragment = new MoviesFragment();
            return moviesFragment;
        case 3:
            // notifications fragment
            NotificationsFragment notificationsFragment = new NotificationsFragment();
            return notificationsFragment;

        case 4:
            // settings fragment
            SettingsFragment settingsFragment = new SettingsFragment();
            return settingsFragment;
        default:
            return new HomeFragment();
    }
}

因此,如果我更改公共类HomeFragment将Fragment扩展到公共类HomeFragment扩展AppCombatActivity,上面代码中的return语句将给出不兼容的类型错误。

请帮我解决这个错误,由于这个错误,我无法制作工具栏或操作栏。任何帮助都会很明显。谢谢!

答案

首先将您的活动从getActivity()投射到AppCompatActivity。我想这会解决你的错误:

((AppCompatActivity) getActivity()).getSupportActionBar(toolbar);

或者在你的情况下:

((AppCompatActivity) getActivity()).setSupportActionController(toolbar);

getActivity()返回FragmentActivity,你需要让AppCompatActivity返回。希望这可以帮助!

另一答案
((AppCompatActivity)getActivity()).setSupportActionBar(editGroupTool); //toolbar id
((AppCompatActivity)getActivity()).getSupportActionBar().setTitle(" "); 
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);

以上是关于如何将工具栏添加到android中的片段?的主要内容,如果未能解决你的问题,请参考以下文章

如何将回收器视图添加到片段

以编程方式将片段添加到android中的框架布局

如何使用java将数据从片段传递到android中的另一个片段?

片段中的 Android 谷歌地图

android fragment addToBackStack(null):如何将同一个片段添加到堆栈中一次?

如何使用菜单按钮将数据从活动传递到android中的片段?