在导航抽屉中管理片段
Posted
技术标签:
【中文标题】在导航抽屉中管理片段【英文标题】:Managing Fragments in a navigation drawer 【发布时间】:2014-01-17 09:52:10 【问题描述】:我从 http://javatechig.com/android/navigation-drawer-android-example 但我无法管理片段,或者更确切地说是屏幕上的主要内容。
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTitle = "Formulas";
getActionBar().setTitle(mTitle);
// Getting reference to the DrawerLayout
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.drawer_list);
// Getting reference to the ActionBarDrawerToggle
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, R.string.drawer_open,
R.string.drawer_close)
/** Called when drawer is closed */
public void onDrawerClosed(View view)
getActionBar().setTitle(mTitle);
invalidateOptionsMenu();
/** Called when a drawer is opened */
public void onDrawerOpened(View drawerView)
getActionBar().setTitle("Formulas");
invalidateOptionsMenu();
;
// Setting DrawerToggle on DrawerLayout
mDrawerLayout.setDrawerListener(mDrawerToggle);
// Creating an ArrayAdapter to add items to the listview mDrawerList
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getBaseContext(),
R.layout.drawer_list_item, getResources().getStringArray(R.array.menus));
// Setting the adapter on mDrawerList
mDrawerList.setAdapter(adapter);
// Enabling Home button
getActionBar().setHomeButtonEnabled(true);
// Enabling Up navigation
getActionBar().setDisplayHomeAsUpEnabled(true);
// Setting item click listener for the listview mDrawerList
mDrawerList.setOnItemClickListener(new OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
// Getting an array of rivers
String[] menuItems = getResources().getStringArray(R.array.menus);
// Currently selected river
mTitle = menuItems[position];
// Creating a fragment object
WebViewFragment rFragment = new WebViewFragment();
// Passing selected item information to fragment
Bundle data = new Bundle();
data.putInt("position", position);
data.putString("url", getUrl(position));
rFragment.setArguments(data);
// Getting reference to the FragmentManager
FragmentManager fragmentManager = getFragmentManager();
// Creating a fragment transaction
FragmentTransaction ft = fragmentManager.beginTransaction();
// Adding a fragment to the fragment transaction
ft.replace(R.id.content_frame, rFragment);
// Committing the transaction
ft.commit();
// Closing the drawer
mDrawerLayout.closeDrawer(mDrawerList);
);
protected String getUrl(int position)
switch (position)
case 0:
return "http://javatechig.com";
case 1:
return "http://javatechig.com/category/android/";
case 2:
return "http://javatechig.com/category/blackberry/";
case 3:
return "http://javatechig.com/category/j2me/";
case 4:
return "http://javatechig.com/category/sencha-touch/";
case 5:
return "http://javatechig.com/category/phonegap/";
case 6:
return "http://javatechig.com/category/java/";
default:
return "http://javatechig.com";
如何管理片段以便我可以: - 在项目中输入基本的 xml/java(所以我不必担心捆绑) 要么 - 替换当前片段,以便我可以创建自己的片段并自己自定义所有内容
【问题讨论】:
其实我不太确定你的问题是什么,Bundles 用于将数据传递给片段,你可以在其中显示等等。你能再次指出你的具体问题是什么吗? 【参考方案1】:尝试检查这个答案..
它将帮助您以动态方式设置和使用导航抽屉...
https://***.com/a/34244065/2457493
希望这能满足您的查询..
【讨论】:
【参考方案2】:我假设这是 SDK 附带的 Android 项目的示例代码。 您的示例实际上包含在 Activity 的内容窗格中交换片段所需的代码。
// Getting reference to the FragmentManager
FragmentManager fragmentManager = getFragmentManager();
// Creating a fragment transaction
FragmentTransaction ft = fragmentManager.beginTransaction();
// Adding a fragment to the fragment transaction
ft.replace(R.id.content_frame, rFragment);
// Committing the transaction
ft.commit();
您的rFragment
是要加载的片段。您可以将整个部分放在一个方法中,然后将要加载的片段作为该方法的参数传递,例如
private void replaceFragment(Fragment newFragment)
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.content_frame, newFragment);
ft.commit();
如果要加载的 Fragment 需要将数据传递给它,则可以使用 Bundle。您的片段可能采用不同类型的数据,但上面的代码仍然适用。在 Fragment
对象上调用 setArguments()
后调用它。
【讨论】:
调用命令会是什么样子? replaceFragment(/*这里会写什么?*/); 你可以在需要的地方调用它。例如。您从 Activity 类中的数据库接收数据,并希望将其显示在新的 Fragment 中。您创建一个新的 Fragment(例如 DataTableFragment,在一个单独的类中的子类 Fragment),创建一个 Bundle,将一些参数放入其中,在新创建的 DataTableFragment 对象上调用 setArguments(Bundle...),然后读出 onCreateView 中的参数() 方法在您的 DataTableFragment 类等中。您可能想了解 Android 开发者网站上描述的基础知识:developer.android.com/guide/components/fragments.html以上是关于在导航抽屉中管理片段的主要内容,如果未能解决你的问题,请参考以下文章