在Android中从Fragment设置标题inToolBar

And*_*ech 20 android android-toolbar

我一直在使用AppCompatv7 lib中的最新工具栏.我在ToolBar ViewGroup中放置了一个textview我想从我的activity中的片段中为这个Textview设置一个标题.如果是自定义操作栏((ActionBarActivity)getActivity) .setcustomView(..)本来可以完成这项工作.但是由于使用了这个ToolBar,我无法使用它.我也在我的BaseActivity中实现了一个由所有Activities继承的方法.这个BaseActivity包含我初始化的方法左侧的滑动抽屉.我必须初始化活动中的initDrawerLayout()方法,否则抽屉不会被初始化.如果我在片段中初始化它给我所有空的结果,抽屉的切换按钮和也不是自定义标题设置.

这是我的initDrawer代码..

public void initDrawerLayout(String toolbar_text) {
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerRelative = (RelativeLayout) findViewById(R.id.drawer_relative);
        if (mDrawerLayout != null) {
            findViewById(R.id.drawer_btn_a).setOnClickListener(this);
            findViewById(R.id.drawer_btn_b).setOnClickListener(this);
            findViewById(R.id.drawer_btn_c).setOnClickListener(this);
            findViewById(R.id.drawer_btn_d).setOnClickListener(this);
            findViewById(R.id.drawer_btn_e).setOnClickListener(this);
            findViewById(R.id.drawer_btn_f).setOnClickListener(this);
            findViewById(R.id.drawer_btn_g).setOnClickListener(this);
            findViewById(R.id.drawer_btn_h).setOnClickListener(this);
            findViewById(R.id.drawer_btn_i).setOnClickListener(this);
            findViewById(R.id.drawer_btn_j).setOnClickListener(this);
            findViewById(R.id.drawer_btn_k).setOnClickListener(this);
            findViewById(R.id.drawer_btn_l).setOnClickListener(this);
            findViewById(R.id.my_layout).setOnClickListener(this);





            Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
            toolbar.setBackground(getResources().getDrawable(R.drawable.icn_actionbar_background));
            TextView mTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);
            mTitle.setText(toolbar_text);
            mTitle.setTypeface(Typeface.DEFAULT_BOLD);
            if (toolbar != null) {
                setSupportActionBar(toolbar);
                 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            }
            toolbar.setNavigationIcon(R.drawable.ic_drawer);

             mDrawerToggle = new ActionBarDrawerToggle(
                    this,  mDrawerLayout, toolbar,
                    R.string.drawer_open, R.string.drawer_close
                );
                mDrawerLayout.setDrawerListener(mDrawerToggle);


            toolbar.setNavigationOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
                        mDrawerLayout.closeDrawer(Gravity.LEFT);
                    } else {
                        mDrawerLayout.openDrawer(Gravity.LEFT);
                    }
                }
            });
            mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
                    GravityCompat.START);

            mDrawerLayout.setScrimColor(getResources().getColor(
                    android.R.color.transparent));
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setHomeButtonEnabled(true);
            getSupportActionBar().setDisplayShowTitleEnabled(false);

        }
    }
Run Code Online (Sandbox Code Playgroud)

这是我片段中的代码..

((FirstActivity) getActivity()).initDrawerLayout(mFirst.name); 其中mFirst是Person类的对象

和工具栏代码..

<android.support.v7.widget.Toolbar
            android:id="@+id/my_awesome_toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:minHeight="?attr/actionBarSize">
           <TextView
                android:id="@+id/toolbar_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:gravity="center"
                android:text="Toolbar Title"
                android:textColor="@color/action_text-color"
                android:textSize="18sp"
                android:textStyle="bold" /> 

            </android.support.v7.widget.Toolbar>
Run Code Online (Sandbox Code Playgroud)

请帮帮我们..

小智 41

我是这样做的:来自片段调用

getActivity().setTitle("your title");
Run Code Online (Sandbox Code Playgroud)

您也可以调用父Activity的任何功能,如下所示:

YourActivity mYourActiviy = (YourActivity) getActivity();
mYourActivity.yourActivityFunction(yourParameters);
Run Code Online (Sandbox Code Playgroud)


ANU*_*PTA 11

如果您在您的活动中设置了支持操作栏,那么您可以轻松地从片段中更改工具栏标题

((YourActivity) getActivity()).getSupportActionBar().setTitle("Your Title");
Run Code Online (Sandbox Code Playgroud)


Coo*_*ind 11

在科特林。

片段中:

(activity as YourActivity).supportActionBar?.title = getString(R.string.your_title)
Run Code Online (Sandbox Code Playgroud)

活动中:

setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
Run Code Online (Sandbox Code Playgroud)


Ste*_*fen 7

要允许Fragment与其Activity进行通信(设置工具栏标题),您可以在Fragment类中定义一个接口,并在Activity中实现它,如下所述:与其他片段进行通信.


Pan*_*egi 7

您可以在 Fragment 内创建接口。检查以下:-

public class MyFragment extends Fragment {
    OnMyFragmentListener mListener;

    // Where is this method called??
    public void setOnMyFragmentListener(OnMyFragmentListener listener) {
        this.mListener = listener;
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnMyFragmentListener) {
            mListener = (OnMyFragmentListener) context;
            mListener.onChangeToolbarTitle("My Fragment"); // Call this in `onResume()`
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    @Override
    public void onResume(){
        super.onResume();
        mListener.onChangeToolbarTitle("My Fragment");
    }


    // This interface can be implemented by the Activity, parent Fragment,
    // or a separate test implementation.
    public interface OnMyFragmentListener {
        public void onChangeToolbarTitle(String title);
    }

}
Run Code Online (Sandbox Code Playgroud)

在活动中:-

public class MyActivity extends AppCompatActivity implements MyFragment.OnMyFragmentListener {

    @Override
    public void onChangeToolbarTitle(String title){
        toolbar.setTitle(title);
    }

}
Run Code Online (Sandbox Code Playgroud)

这对我有用。:)


小智 5

答案写在下面oncreateview的片段方法中。

getActivity().setTitle("your name");
Run Code Online (Sandbox Code Playgroud)


小智 5

这在 Kotlin 中对我有用。将其放入您的片段类中:

if (activity != null) {
        (activity as MainActivity).supportActionBar?.title = getString(R.string.action_history)
    }
Run Code Online (Sandbox Code Playgroud)