多级列表视图从一个项目中打开两个活动。安卓工作室 |爪哇

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");
 

【讨论】:

以上是关于多级列表视图从一个项目中打开两个活动。安卓工作室 |爪哇的主要内容,如果未能解决你的问题,请参考以下文章

回收站视图仅在我从房间数据库中删除后重新打开活动时更新

如何保存android活动的状态

如何将子列表视图项目包含每个项目的数据

如何子列表视图项目可以有每个项目的数据

从列表视图中单击歌曲后,新活动正在打开但歌曲未播放

我如何使用意图从列表视图转到下一个活动? [复制]