多级列表视图从一个项目中打开两个活动。安卓工作室 |爪哇
Posted
技术标签:
【中文标题】多级列表视图从一个项目中打开两个活动。安卓工作室 |爪哇【英文标题】:Multilevel list view opening two activities from one item. Android Studio | java 【发布时间】:2021-05-06 07:10:02 【问题描述】:我是一个初学者,我在导航视图中创建了一个 3 级多级列表视图,其中项目和组项目在那里,每个项目打开都是一个新活动。图片附在下面。 image
问题是有一个名为 Tomorrowland 的组项目,它还有两个项目,但是在单击 Tomorrowland Winners 时,它会在堆栈中打开两个活动。像 Tomorrowland 获胜者一样,应该打开活动 A,但打开活动 B,当在背面按下活动 B 时,活动 A 会打开。 活动 B 在点击获胜者时打开。
首页活动代码:
public class HomeActivity1 extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener
@BindView(R.id.multi_home)
MultiLevelListView multiLevelListView;
@BindView(R.id.drawer_layout)
DrawerLayout drawer;
@BindView(R.id.cvSlider)
CardView cvSlider;
@BindView(R.id.autoSlider)
SliderView autoSlider;
@BindView(R.id.rvClub)
RecyclerView rvClub;
@BindView(R.id.rvProjects)
RecyclerView rvProjects;
Toolbar toolbar;
NavigationView nav_view_home;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
ButterKnife.bind(this);
setSupportActionBar(toolbar);
toolbar = findViewById(R.id.appbarToolbar);
nav_view_home = findViewById(R.id.nav_view_home);
toolbar.setTitle(R.string.app_name);
toolbar.setTitleTextColor(getResources().getColor(R.color.white));
confMenu();
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.getDrawerArrowDrawable().setColor(getResources().getColor(R.color.white));
toggle.setDrawerSlideAnimationEnabled(true);
toggle.setDrawerIndicatorEnabled(true);
toggle.syncState();
toggle.getDrawerArrowDrawable().setColor(getResources().getColor(R.color.white));
nav_view_home.setNavigationItemSelectedListener(this);
displaySelectedScreen("HOME");
private OnItemClickListener mOnItemClickListener = new OnItemClickListener()
private void showItemDescription(Object object, ItemInfo itemInfo)
if (((BaseItem) object).getName().contains("Home"))
displaySelectedScreen("HOME");
if (((BaseItem) object).getName().contains("We Believe"))
displaySelectedScreen("WE BELIEVE");
if (((BaseItem) object).getName().contains("Workshop"))
displaySelectedScreen("WORKSHOPS");
if (((BaseItem) object).getName().contains("Events"))
displaySelectedScreen("EVENTS");
if (((BaseItem) object).getName().contains("Projects"))
displaySelectedScreen("PROJECTS");
if (((BaseItem) object).getName().contains("Tomorrowland Winners"))
displaySelectedScreen("TOMORROWLAND WINNERS");
if (((BaseItem) object).getName().contains("Tomorrowland Jr."))
displaySelectedScreen("TOMORROWLAND JR.");
if (((BaseItem) object).getName().contains("Winners"))
displaySelectedScreen("SPELL BE WINNERS");
if (((BaseItem) object).getName().contains("Video Gallery"))
displaySelectedScreen("VIDEO GALLERY");
if (((BaseItem) object).getName().contains("Blog"))
displaySelectedScreen("BLOG");
if (((BaseItem) object).getName().contains("Club"))
displaySelectedScreen("CLUBS");
if (((BaseItem) object).getName().contains("Feed"))
displaySelectedScreen("FEED");
if (((BaseItem) object).getName().contains("Login"))
displaySelectedScreen("LOGIN");
if (((BaseItem) object).getName().contains("Career"))
displaySelectedScreen("CAREER");
if (((BaseItem) object).getName().contains("Inquiry"))
displaySelectedScreen("INQUIRY");
@Override
public void onItemClicked(MultiLevelListView parent, View view, Object item, ItemInfo itemInfo)
showItemDescription(item, itemInfo);
@Override
public void onGroupItemClicked(MultiLevelListView parent, View view, Object item, ItemInfo itemInfo)
showItemDescription(item, itemInfo);
;
private void confMenu()
// custom ListAdapter
ListAdapter listAdapter = new ListAdapter();
multiLevelListView.setAdapter(listAdapter);
multiLevelListView.setOnItemClickListener(mOnItemClickListener);
listAdapter.setDataItems(HomeCustomDataProvider.getInitialItems());
@Override
public void onBackPressed()
super.onBackPressed();
finish();
private void displaySelectedScreen(String itemName)
switch (itemName)
case "HOME":
drawer.close();
break;
case "WE BELIEVE":
Intent intent = new Intent(HomeActivity1.this,WeBelieveActivity.class);
startActivity(intent);
break;
case "WORKSHOPS":
Intent intent1 = new Intent(HomeActivity1.this,WorkshopsActivity.class);
startActivity(intent1);
break;
case "EVENTS":
Intent intent2 = new Intent(HomeActivity1.this,EventsActivity.class);
startActivity(intent2);
break;
case "PROJECTS":
Intent intent3 = new Intent(HomeActivity1.this,ProjectsActivity.class);
startActivity(intent3);
break;
case "TOMORROWLAND WINNERS":
Intent intent4 = new Intent(HomeActivity1.this, TomorrowLandWinnersActivity.class);
startActivity(intent4);
break;
case "TOMORROWLAND JR.":
Intent intent5 = new Intent(HomeActivity1.this, TomorrowLandJrWinnersActivity.class);
startActivity(intent5);
break;
case "SPELL BE WINNERS":
Intent intent6 = new Intent(HomeActivity1.this,SpellBeWinnersActivity.class);
startActivity(intent6);
break;
case "VIDEO GALLERY":
Intent intent7 = new Intent(HomeActivity1.this,VideoGalleryActivity.class);
startActivity(intent7);
break;
case "BLOG":
Intent intent8 = new Intent(HomeActivity1.this,BlogActivity.class);
startActivity(intent8);
break;
case "CLUBS":
Intent intent9 = new Intent(HomeActivity1.this,ClubActivity.class);
startActivity(intent9);
break;
case "FEED":
Intent intent10 = new Intent(HomeActivity1.this,FeedActivity.class);
startActivity(intent10);
break;
case "LOGIN":
Intent intent11 = new Intent(HomeActivity1.this,LoginActivity.class);
startActivity(intent11);
break;
case "CAREER":
Intent intent12 = new Intent(HomeActivity1.this,CareerActivity.class);
startActivity(intent12);
break;
case "INQUIRY":
Intent intent13 = new Intent(HomeActivity1.this,InquiryActivity.class);
startActivity(intent13);
break;
drawer.close();
@Override
public boolean onNavigationItemSelected(MenuItem item)
//calling the method display selected screen and passing the id of selected menu
displaySelectedScreen(String.valueOf(item.getItemId()));
//make this method blank
return true;
private class ListAdapter extends MultiLevelListAdapter
@Override
public List<?> getSubObjects(Object object)
return HomeCustomDataProvider.getSubItems((BaseItem) object);
@Override
public boolean isExpandable(Object object)
return HomeCustomDataProvider.isExpandable((BaseItem) object);
@SuppressLint("InflateParams")
@Override
public View getViewForObject(Object object, View convertView, ItemInfo itemInfo)
ViewHolder viewHolder;
if (convertView == null)
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(HomeActivity1.this).inflate(R.layout.makers_menu_item, null);
viewHolder.nameView = convertView.findViewById(R.id.dataItemName);
viewHolder.arrowView = convertView.findViewById(R.id.dataItemArrow);
viewHolder.levelBeamView = convertView.findViewById(R.id.dataItemLevelBeam);
convertView.setTag(viewHolder);
else
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.nameView.setText(((BaseItem) object).getName());
if (itemInfo.isExpandable())
viewHolder.arrowView.setVisibility(View.VISIBLE);
viewHolder.arrowView.setImageResource(itemInfo.isExpanded() ?
R.drawable.ic_arrow_up : R.drawable.ic_bottom_arrow);
else
viewHolder.arrowView.setVisibility(View.GONE);
viewHolder.levelBeamView.setLevel(itemInfo.getLevel());
return convertView;
private class ViewHolder
TextView nameView;
ImageView arrowView;
LevelBeamView levelBeamView;
HomeCustomDataProvoder 代码如下:
public class HomeCustomDataProvider
private static final int MAX_LEVELS = 3;
private static final int LEVEL_1 = 1;
private static final int LEVEL_2 = 2;
private static final int LEVEL_3 = 3;
private static List<BaseItem> mMenu = new ArrayList<>();
Context context;
public static List<BaseItem> getInitialItems()
List<BaseItem> rootMenu = new ArrayList<>();
rootMenu.add(new Item("Home"));
rootMenu.add(new Item("We Believe"));
rootMenu.add(new GroupItem("Echo"));
rootMenu.add(new Item("Video Gallery"));
rootMenu.add(new Item("Blog"));
rootMenu.add(new Item("Clubs"));
rootMenu.add(new Item("Feeds"));
rootMenu.add(new Item("Login"));
rootMenu.add(new GroupItem("Connect"));
return rootMenu;
public static List<BaseItem> getSubItems(BaseItem baseItem)
List<BaseItem> result = new ArrayList<>();
int level1 = ((GroupItem) baseItem).getLevel() + 1;
int level2 = ((GroupItem) baseItem).getLevel() + 2;
String menuItem = baseItem.getName();
GroupItem groupItem = (GroupItem) baseItem;
if (groupItem.getLevel() >= MAX_LEVELS)
return null;
if (level1 == LEVEL_1)
switch (menuItem.toUpperCase())
case "ECHO":
result = getListEcho();
break;
case "CONNECT":
result = getListConnect();
break;
if (level2 == LEVEL_2)
switch (menuItem.toUpperCase())
case "TOMORROWLAND":
result = getListTomorrowland();
break;
case "SPELL BE":
result = getListSpellBe();
break;
return result;
public static boolean isExpandable(BaseItem baseItem)
return baseItem instanceof GroupItem;
private static List<BaseItem> getListEcho()
List<BaseItem> list = new ArrayList<>();
list.add(new Item("Workshops"));
list.add(new Item("Events"));
list.add(new Item("Projects"));
list.add(new GroupItem("Tomorrowland"));
list.add(new GroupItem("Spell Be"));
return list;
private static List<BaseItem> getListTomorrowland()
List<BaseItem> list = new ArrayList<>();
list.add(new Item("Tomorrowland Winners"));
list.add(new Item("Tomorrowland Jr."));
return list;
private static List<BaseItem> getListSpellBe()
List<BaseItem> list = new ArrayList<>();
list.add(new Item("Winners"));
return list;
private static List<BaseItem> getListConnect()
List<BaseItem> list = new ArrayList<>();
list.add(new Item("Career"));
list.add(new Item("Inquiry"));
return list;
任何帮助将不胜感激。提前致谢。
【问题讨论】:
【参考方案1】:您应该使用equals
来检查所有条件,而不是使用contains
,在您的情况下,TomorrowLand Winners
包含Winners
并且Winners
包含Winners
,因此它同时打开。
//do this for all conditions
if (((BaseItem) object).getName().equals("Tomorrowland Winners"))
displaySelectedScreen("TOMORROWLAND WINNERS");
【讨论】:
以上是关于多级列表视图从一个项目中打开两个活动。安卓工作室 |爪哇的主要内容,如果未能解决你的问题,请参考以下文章