暂停for循环,除非在android工作室中单击按钮



我是安卓工作室的新手,有一个问题似乎无法解决。我正在使用for循环解析网站中的一些XML,以获取每个元素。我的问题是,如何在for循环的第一次迭代中暂停它,这样它就不会继续到下一次,直到点击这个按钮?

这是我的for循环:

try {
            URL url = new URL("http://www.website.xml");
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(new InputSource(url.openStream()));
            doc.getDocumentElement().normalize();
            NodeList nodeList = doc.getElementsByTagName("patient_order");
            /** Assign textview array length by arraylist size */
            patientName = new TextView[nodeList.getLength()];
            patientID = new TextView[nodeList.getLength()];
            medicine = new TextView[nodeList.getLength()];
            dosage = new TextView[nodeList.getLength()];
            refillsRemaining = new TextView[nodeList.getLength()];
            for (int i = 0; i < nodeList.getLength(); i++) {
                Node node = nodeList.item(i);
                patientName[i] = new TextView(this);
                patientID[i] = new TextView(this);
                medicine[i] = new TextView(this);
                dosage[i] = new TextView(this);
                refillsRemaining[i] = new TextView(this);
                Element fstElmnt = (Element) node;
                NodeList nameList = fstElmnt.getElementsByTagName("patientName");
                Element nameElement = (Element) nameList.item(0);
                nameList = nameElement.getChildNodes();
                patientName[i].setText("Patient: "
                        + ((Node) nameList.item(0)).getNodeValue());
                NodeList websiteList = fstElmnt.getElementsByTagName("patientID");
                Element websiteElement = (Element) websiteList.item(0);
                websiteList = websiteElement.getChildNodes();
                patientID[i].setText("ID: "
                        + ((Node) websiteList.item(0)).getNodeValue());
                NodeList medicineList = fstElmnt.getElementsByTagName("medicine");
                Element medicineElement = (Element) medicineList.item(0);
                medicineList = medicineElement.getChildNodes();
                medicine[i].setText("RX: "
                        + ((Node) medicineList.item(0)).getNodeValue());
                NodeList dosageList = fstElmnt.getElementsByTagName("dosage");
                Element dosageElement = (Element) dosageList.item(0);
                dosageList = dosageElement.getChildNodes();
                dosage[i].setText("Dosage: "
                        + ((Node) dosageList.item(0)).getNodeValue());
                NodeList refillsList = fstElmnt.getElementsByTagName("refillsRemaining");
                Element refillsElement = (Element) refillsList.item(0);
                refillsList = refillsElement.getChildNodes();
                refillsRemaining[i].setText("Remaining: "
                        + ((Node) refillsList.item(0)).getNodeValue());
                layout.addView(patientName[i]);
                layout.addView(patientID[i]);
                layout.addView(medicine[i]);
                layout.addView(dosage[i]);
                layout.addView(refillsRemaining[i]);
            btn.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View view)
                {
                   //What is going to happen to make the for loop continue 
                }
            });
            }//end for
        } //end try

您永远不想暂停UI线程,所以创建一个新线程来执行for循环http://developer.android.com/training/multiple-threads/communicate-ui.html应该列出一些选项,以便在主UI线程(不能不惜一切代价堵塞(和执行实际工作的侧线程之间进行通信。您的主UI线程正忙于保持屏幕活动和响应,因此暂停它通常是不允许的。

您可以使用这个答案中的方法:如何从另一个线程暂停和恢复Java中的线程。但它在你的情况下不起作用

因为

  1. 从不暂停UI线程。它挂起你的用户界面并指向ANR。也不要在UI线程中使用网络和其他重量级操作。你可以使用AyncTask来做艰苦的工作。如果您将XML解析代码封装在AsyncTask中,则可以用onClick()方法启动它。所以你不需要暂停循环
  2. 你真的需要TextView的数组吗?如果您需要显示数据列表,为什么不使用ListView

最新更新