【问题标题】:there is an unexpected result for the if statement in android studio, why?android studio中的if语句出现意外结果,为什么?
【发布时间】:2020-12-21 01:16:43
【问题描述】:

在我的可扩展列表视图中,我编写了 (if) 语句,如果子行中包含两个单词,则返回一个(对话框)..

这里是代码:

.......
    childObjects.add(new ChildObject(cetamol + " " + syr + " 160 " + mg5ml
                , cetamolDoseMini160));
    ..........



    elv = findViewById(R.id.elv);
    elv.setOnGroupExpandListener(onGroupExpandListenser);

    MyExpandableAdapter adapter = new MyExpandableAdapter(this, getData());
    elv.setAdapter(adapter);

    elv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {

        @Override
        public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {

            for (int i = 0; i < ((ViewGroup) v).getChildCount(); ++i) {
                View nextChild = ((ViewGroup) v).getChildAt(i);
                if (nextChild.getId() == R.id.txtChildName) {
                    String data = ((TextView) nextChild).getText().toString();

                    String paracetamol = getResources().getString(R.string.Paracetamol);

                
                    if (data.contains(paracetamol)|| data.contains("160")) {

                        AlertDialog.Builder builder = new AlertDialog.Builder(Analgesics.this);

                        builder.setTitle(" Paracetamol 160:");

                        String[] drugsTrades = {"Hayamol 160 ", "Paradrin 160 "};

                        builder.setItems(drugsTrades, new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                            }
                        });
                        AlertDialog dialog = builder.create();
                        // dialog.getWindow().setBackgroundDrawableResource(R.color.translucent_black);
                        dialog.show();
                    }

                }
            }
                return true;
            }
    });

但(if 语句)看到(仅)第一部分“扑热息痛”,而没有看到第二部分“160”

【问题讨论】:

  • 您确定问题不在于第一个if 语句,您似乎在比较字符串与== 而不是.equals()
  • 我使用 (data.contains) 而不是 (data.equals) ,当两个单词出现在原始数据中时,我想返回一个值
  • 我说的是第一个 if,而不是第二个。您在哪里使用==。不要那样做。
  • second if,尝试使用 &amp;&amp; 而不是 ||,因为如果左侧为真,则不会评估右侧。 (short-circuit evaluation)
  • 是的,真的不要使用== 来比较字符串。即使它偶尔会起作用。但只是为了理解......你是说你试图匹配包含“扑热息痛”和“160”的字符串,而不是一个或另一个?如果是这种情况,是的,使用 &amp;&amp; 而不是 || 进行 AND。

标签: java android if-statement expandablelistview


【解决方案1】:

用这段代码替换你的整个代码。

.......
childObjects.add(new ChildObject(cetamol + " " + syr + " 160 " + mg5ml
            , cetamolDoseMini160));
..........



elv = findViewById(R.id.elv);
elv.setOnGroupExpandListener(onGroupExpandListenser);

MyExpandableAdapter adapter = new MyExpandableAdapter(this, getData());
elv.setAdapter(adapter);

elv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {

    @Override
    public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {

        for (int i = 0; i < ((ViewGroup) v).getChildCount(); ++i) {
            View nextChild = ((ViewGroup) v).getChildAt(i);
            if (nextChild.getId() == R.id.txtChildName) {
                String data = ((TextView) nextChild).getText().toString();

                String paracetamol = getResources().getString(R.string.Paracetamol);

            
                if (data.contains(paracetamol) && data.contains("160")) {

                    AlertDialog.Builder builder = new AlertDialog.Builder(Analgesics.this);

                    builder.setTitle(" Paracetamol 160:");

                    String[] drugsTrades = {"Hayamol 160 ", "Paradrin 160 "};

                    builder.setItems(drugsTrades, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                        }
                    });
                    AlertDialog dialog = builder.create();
                    // dialog.getWindow().setBackgroundDrawableResource(R.color.translucent_black);
                    dialog.show();
                }

            }
        }
            return true;
        }
});

【讨论】: