如何将工具栏添加到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中的片段?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用java将数据从片段传递到android中的另一个片段?