【问题标题】:Hidden field in ListView to pass a variableListView 中的隐藏字段以传递变量
【发布时间】:2011-06-03 14:34:03
【问题描述】:

我正在尝试构建我的第一个应用程序,它几乎可以从网上的 XML 文件创建一个列表。当我单击一个列表项时,它应该打开另一个活动并访问另一个在线生成的 XML 文件,其中包含该项目的详细信息。 我设法使列表以及带有详细信息的第二个活动窗口正常工作。剩下要做的唯一一件事就是将 id 从一个活动传递到另一个活动。 有没有办法将每个条目的 ID 存储在列表项中?我没有使用本地 SQLite 数据库或任何东西,所以如果可能的话,我需要找到一种“即时”执行此操作的方法 提前致谢

【问题讨论】:

    标签: android variables listview android-activity android-intent


    【解决方案1】:

    谢谢我让它工作! 这是代码以防万一有人遇到同样的问题:

    package en.android.itleaked.com;
    
    import java.net.URL;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.InputSource;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.Toast;
    
    public class getReleases extends Activity {
        public ListView lv1;
        private static final int ACTIVITY_CREATE = 0;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            getFeed();
    
        }
    
    
        public void getFeed() {
            try {
                URL url = new URL("http://www.it-leaked.com/app/main.php");
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder db = dbf.newDocumentBuilder();
                Document doc = db.parse(new InputSource(url.openStream()));
                doc.getDocumentElement().normalize();
                NodeList nodeList = doc.getElementsByTagName("item");
                String lv_arr[] = new String[nodeList.getLength()];
                final String lv_arr_id[] = new String[nodeList.getLength()];  
                for (int i = 0; i < nodeList.getLength(); i++) {
                    Node node = nodeList.item(i);
                    Element fstElmnt = (Element) node;
                    NodeList nameList = fstElmnt.getElementsByTagName("title");
                    Element nameElement = (Element) nameList.item(0);
                    nameList = nameElement.getChildNodes();
                    lv_arr[i] = ((Node) nameList.item(0)).getNodeValue();
    
                    NodeList idList = fstElmnt.getElementsByTagName("id");
                    Element idElement = (Element) idList.item(0);
                    idList = idElement.getChildNodes();
                    lv_arr_id[i] = ((Node) idList.item(0)).getNodeValue();
                }
    
                lv1=(ListView)findViewById(R.id.ListView01);
                lv1.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, lv_arr));
    
                lv1.setTextFilterEnabled(true);
                lv1.setOnItemClickListener(new OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                                Intent i = new Intent(getReleases.this, showReleases.class);
                                i.putExtra("id", lv_arr_id[position]);
                                startActivityForResult(i, ACTIVITY_CREATE);
                        }
                });
    
    
            }
    
                catch (Exception e) {
                    Toast.makeText(this, "Error: " + e, Toast.LENGTH_LONG).show();
                }
            }
    
    }
    

    这里是接收端:

    package en.android.itleaked.com;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.Toast;
    
    public class showReleases extends Activity {
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.releasedetails);
    
            Bundle extras = getIntent().getExtras();
            if (extras != null) {
                String releaseid = extras.getString("id");
                Toast.makeText(this, releaseid, Toast.LENGTH_LONG).show();
            }
        }
    }
    

    【讨论】:

    • 您应该在单独的线程中进行网络调用。如果您从未见过“应用程序未响应”窗口,请认为自己很幸运
    • 感谢您的示例,正​​是我所需要的。
    【解决方案2】:

    您的列表应该存在于数据模型上,一旦用户单击一行,您应该将该位置映射到模型中的某个点。如果您只想将其组合在一起,您可以在视图上使用setTag() 来存储任何类型的对象。这不是该功能的传统用法。如果您发布如何创建列表视图,它可能会更有帮助。

    查看您的代码后,您可能想要执行以下操作:

    public void onItemClick(AdapterView<?> a, View v, int position, long id) {
    Intent i = new Intent(getReleases.this, showReleases.class);
    i.putExtra("id", lv_arr[position]);
    startActivityForResult(i, ACTIVITY_CREATE);
    }
    

    查看Passing Extras 了解如何使用 putExtra()。

    【讨论】:

    • 嘿,谢谢你的回复!这是我的代码:pastebin.com/DJgThn0S xml 正在生成it-leaked.com/app/main.php 我想要的是能够将 ID 传递给 showReleases 活动,这样我就可以从那里以相同的方式获取 xml 并在服务器上生成内容。 ..例如it-leaked.com/app/release.php?id=45325我希望你能帮助我,因为我是新手,到目前为止我已经花了 2 天的时间来完成这项工作
    猜你喜欢
    • 2014-07-24
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多