【问题标题】:Dynamically implement the switch statement动态实现switch语句
【发布时间】:2013-06-27 09:11:21
【问题描述】:

目前,我有 3 个数组。我正在尝试几个小时。我可以以任何动态方式实现此功能吗?对我来说,For 循环不起作用。有没有办法动态实现这一点。如果你们能帮忙解决这个问题,我会很高兴的。

 switch(pageNumber){
            case 0:
                final ListView list1 = (ListView)rootView.findViewById(R.id.list);
                BinderData bindingData = new BinderData(this.getActivity(), d[0]);
                list1.setAdapter(bindingData);
                list1.setOnItemClickListener(new OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                        if (d[0].get(position).getItemType() == 0
                                || d[0].get(position).getItemType() == 3
                                || d[0].get(position).getItemType() == 2)
                            return;
                        Intent intent = new Intent(Schedule.this.getActivity(),
                                ContentExtended.class);
                        intent.putExtra("title", d[0].get(position).getTitle());
                        intent.putExtra("content", d[0].get(position).getContent());
                        startActivity(intent);
                    }
                });
                break;
            case 1:
                final ListView list2 = (ListView)rootView.findViewById(R.id.list);
                BinderData bindingData1 = new BinderData(this.getActivity(), d[1]);
                list2.setAdapter(bindingData1);
                list2.setOnItemClickListener(new OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                        if (d[1].get(position).getItemType() == 0
                                || d[1].get(position).getItemType() == 3
                                || d[1].get(position).getItemType() == 2)
                            return;
                        Intent intent = new Intent(Schedule.this.getActivity(),
                                ContentExtended.class);
                        intent.putExtra("title", d[1].get(position).getTitle());
                        intent.putExtra("content", d[1].get(position).getContent());
                        startActivity(intent);
                    }
                });
                break;
            case 2:
                final ListView list3 = (ListView)rootView.findViewById(R.id.list);
                BinderData bindingData2 = new BinderData(this.getActivity(), d[2]);
                list3.setAdapter(bindingData2);
                list3.setOnItemClickListener(new OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                        if (d[2].get(position).getItemType() == 0
                                || d[2].get(position).getItemType() == 3
                                || d[2].get(position).getItemType() == 2)
                            return;
                        Intent intent = new Intent(Schedule.this.getActivity(),
                                ContentExtended.class);
                        intent.putExtra("title", d[2].get(position).getTitle());
                        intent.putExtra("content", d[2].get(position).getContent());
                        startActivity(intent);
                    }
                });
                break;

        }

【问题讨论】:

  • “对于我来说,For 循环不起作用”是什么意思?
  • 我不认为Switchfor-loop 的替代品。你为什么这么想?
  • for (int i..;i
  • onClick 检查是在我看到的 pageNumber 上,在每种情况下,我看到的唯一区别是数组 d 的索引。试试这个

标签: java android


【解决方案1】:

在我看来,除了d 数组的索引之外,整个代码都被复制了。所以,它会是这样的:

public void method(int pageNumber) {
     final ListView list = (ListView)rootView.findViewById(R.id.list);
     BinderData bindingData = new BinderData(this.getActivity(), d[pageNumber]);
     list.setAdapter(bindingData);
     list.setOnItemClickListener(new OnItemClickListener() {
         @Override
         public void onItemClick(AdapterView<?> a, View v, int position, long id) {
             if (d[pageNumber].get(position).getItemType() == 0
                            || d[pageNumber].get(position).getItemType() == 3
                            || d[pageNumber].get(position).getItemType() == 2)
                 return;
             Intent intent = new Intent(Schedule.this.getActivity(),
                            ContentExtended.class);
             intent.putExtra("title", d[pageNumber].get(position).getTitle());
             intent.putExtra("content", d[pageNumber].get(position).getContent());
             startActivity(intent);
         }
     });
}

【讨论】:

    【解决方案2】:

    onClick 检查是在我看到的 pageNumber 上,在每种情况下,我看到的唯一区别是数组 d 的索引。在 onClick 方法中试试这个:

           final ListView list1 = (ListView)rootView.findViewById(R.id.list);
            BinderData bindingData = new BinderData(this.getActivity(), d[pageNumber]);
            list1.setAdapter(bindingData);
            list1.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                    if (d[0].get(position).getItemType() == 0
                            || d[pageNumber].get(position).getItemType() == 3
                            || d[pageNumber].get(position).getItemType() == 2)
                        return;
                    Intent intent = new Intent(Schedule.this.getActivity(),
                            ContentExtended.class);
                    intent.putExtra("title", d[pageNumber].get(position).getTitle());
                    intent.putExtra("content", d[pageNumber].get(position).getContent());
                    startActivity(intent);
                }
            });
    

    【讨论】:

    • java-lang-arrayindexoutofboundsexception
    • 这是因为pageNumber的值不正确,请确保您得到正确的pagenumber
    【解决方案3】:

    您不能使用loops 进行切换。你可以使用if。正如我所见,您的代码仅在数组 d 索引中的每种情况下存在差异。所以你不想切换,否则。

    public void onClick(int pageNumber) { 
     //your implementaion
    }
    

    现在您可以将页码传递给此方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 2021-06-12
      • 2013-09-10
      • 2019-10-08
      • 2019-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多