我想在运行时在导航栏中显示一个列表或某种菜单。我有一个单独的活动,我使用框架布局放置片段。该片段包含Webview。每当用户点击导航项时,webview就会打开其替代链接。我成功收到了Retrofit 2.3的回复,但现在我不知道如何实现这个
public void slow()
{
print("Shit, spike's got me!");
StartCoroutine(PauseTheSlowdown(2.1f, .3f, 1));
}
public void Bigslow()
{
print("HOLY CRAP THAT HURT");
StartCoroutine(PauseTheSlowdown(3.7f, 0f, 1));
}
IEnumerator PauseTheSlowdown(float seconds, float before, float after)
{
print("Pause this crap");
speed = before;
yield return new WaitForSecondsRealtime(seconds);
speed = after;
}
我的JSON API看起来像:
public void onResponse(Call<List<NavBarResult>> call, Response<List<NavBarResult>> response) {
List<Result> result = response.body();
//what to do here ?
}
@Override
public void onFailure(Call<List<NavBarResult>> call, Throwable t) {
//error messages here
}
我希望即使我们从API更改数据,所有菜单的项也会自动运行。提前谢谢。
答案 0 :(得分:1)
可能重复。
Android - Add bottom navigation view dynamically
How can I add a menu dynamically to bottom navigation view?
您可以从导航视图中动态获取菜单,然后添加一个包含JSON响应的新菜单项。
在OnNavigationItemSelectedListener中,您可以更改网页浏览的网址。
编辑1
也许我误会了什么。是否要使用JSON响应填充导航栏?在这种情况下,我上面的链接可以帮助你。
您想使用JSON响应填充导航抽屉吗? 在这种情况下,您应该开始阅读:https://developer.android.com/training/implementing-navigation/nav-drawer.html
修改您的活动布局:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer -->
<ListView android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#111"/>
</android.support.v4.widget.DrawerLayout>
获取left_drawer:
mDrawerList = (ListView) findViewById(R.id.left_drawer);
当您获得JSON响应时,只需将适配器设置为mDrawerList:
public void onResponse(Call<List<NavBarResult>> call, Response<List<NavBarResult>> response) {
// result is a private List<Result> attribute of the class.
result = response.body();
// Set the adapter for the list view
mDrawerList.setAdapter(new ArrayAdapter<Result>(this,
android.R.layout.simple_list_item_1, result));
// Set the list's click listener
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
}
这样,您的抽屉布局将动态填充您的JSON响应。
然后,您只需定义OnItemClickListener即可在单击列表中的项目时调用新片段。
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
}
MyFragment不是这里的developp,但它包含一个webView并等待一个ARG_LINK,它应该是一个在其webView中显示的URL。
private void selectItem(int position) {
// Create a new fragment and specify the link to show based on position
Fragment fragment = new MyFragment();
Bundle args = new Bundle();
args.putString(MyFragment.ARG_LINK, result.get(position).getUrl());
fragment.setArguments(args);
// Insert the fragment by replacing any existing fragment
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.content_frame, fragment)
.commit();
// Highlight the selected item and close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerLayout.closeDrawer(mDrawerList);
}
希望这次帮助你!
答案 1 :(得分:0)
您可以在导航抽屉中添加导航视图,然后当您从API接收项目时,您可以将项目添加到菜单中,请参阅下面的代码以添加菜单中的项目。
final Menu menu = navigationView.getMenu();
//Here you should add the length of your json array instead 'i' .
for (int i = 1; i <= 3; i++) {
menu.add("Runtime item "+ i);
}