Внутренний ответ от бэкэнда. У меня есть меню и список подменю для отображения в ящике навигации. Я немного попробовал, но не смог, вот мой код:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true">
<ExpandableListView
android:id="@+id/navigationmenu"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginTop="192dp"
android:background="@android:color/white">
</ExpandableListView>
</com.google.android.material.navigation.NavigationView>
в классе .java:
public class NavigationViewActivity extends AppCompatActivity {
private DrawerLayout mDrawerLayout;
ExpandableListAdapter mMenuAdapter;
ExpandableListView expandableList;
List<ExpandedMenuModel> listDataHeader;
HashMap<ExpandedMenuModel, List<String>> listDataChild;
JSONObject jsonObject;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navigation_view);
final ActionBar ab = getSupportActionBar();
/* to set the menu icon image*/
ab.setHomeAsUpIndicator(android.R.drawable.ic_menu_add);
ab.setDisplayHomeAsUpEnabled(true);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
expandableList = (ExpandableListView) findViewById(R.id.navigationmenu);
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
if (navigationView != null) {
setupDrawerContent(navigationView);
}
prepareListData();
mMenuAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild, expandableList);
expandableList.setAdapter(mMenuAdapter);
expandableList.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView expandableListView, View view, int i, int i1, long l) {
return false;
}
});
expandableList.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) {
return false;
}
});
}
private void prepareListData() {
listDataHeader = new ArrayList<ExpandedMenuModel>();
listDataChild = new HashMap<ExpandedMenuModel, List<String>>();
ExpandedMenuModel item1 = new ExpandedMenuModel();
item1.setIconName("heading1");
item1.setIconImg(android.R.drawable.ic_delete);
// Adding data header
listDataHeader.add(item1);
ExpandedMenuModel item2 = new ExpandedMenuModel();
item2.setIconName("heading2");
item2.setIconImg(android.R.drawable.ic_delete);
listDataHeader.add(item2);
ExpandedMenuModel item3 = new ExpandedMenuModel();
item3.setIconName("heading3");
item3.setIconImg(android.R.drawable.ic_delete);
listDataHeader.add(item3);
// Adding child data
List<String> heading1 = new ArrayList<String>();
heading1.add("Submenu of item 1");
List<String> heading2 = new ArrayList<String>();
heading2.add("Submenu of item 2");
heading2.add("Submenu of item 2");
heading2.add("Submenu of item 2");
listDataChild.put(listDataHeader.get(0), heading1);// Header, Child data
listDataChild.put(listDataHeader.get(1), heading2);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
mDrawerLayout.openDrawer(GravityCompat.START);
return true;
}
return super.onOptionsItemSelected(item);
}
private void setupDrawerContent(NavigationView navigationView) {
//revision: this don't works, use setOnChildClickListener() and setOnGroupClickListener() above instead
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
menuItem.setChecked(true);
mDrawerLayout.closeDrawers();
return true;
}
});
}
private void getMenuDrawer() {
ApiInterface apiInterface = RetrofitManager.getClient().create(ApiInterface.class);
Call<JsonObject> call = apiInterface.getMenuDrawer();
call.enqueue(new Callback<JsonObject>() {
@Override
public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
if (response.isSuccessful()) {
response.body();
try {
jsonObject = new JSONObject(response.body().toString());
JSONObject jsonObject1 = jsonObject.getJSONObject("user");
JSONArray jsonArray = jsonObject1.getJSONArray("userdata");
for (int i = 0; i < jsonArray.length(); i++) {
jsonObject1 = (JSONObject) jsonArray.opt(i);
Userdatum userdatum = new Userdatum();
userdatum.setMenuName(jsonObject1.getString("menuName"));
userdatum.setMenuID(jsonObject1.getString("menuID"));
userdatum.setIcon(jsonObject1.getString("icon"));
userdatum.setParentID(jsonObject1.getString("parentID"));
userdatum.setPriority(jsonObject1.getString("parentID"));
list.add(userdatum);
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("@NO Success", response.message());
}
}
@Override
public void onFailure(Call<JsonObject> call, Throwable t) {
Log.d("@counselingError", "");
}
});
}
Я получаю ответ, но не знаю, как его получить:
ответ похож на этот формат:
{
"пользователь": {
"данные пользователя": [
{
«menuID»: «153»,
"menuName": "Регистрация (1)",
"ссылка": "регистрация",
"icon": "iniicon-feereport",
"pullRight": ноль,
«статус»: «1»,
"parentID": "152",
«приоритет»: «10010»
},
{
"menuID": "1",
"menuName": "панель инструментов",
"ссылка": "панель инструментов",
"icon": "fa-laptop",
"pullRight": "",
«статус»: «1»,
"parentID": "0",
«приоритет»: «10000»
}