0

我正在使用以下格式的远程 JSON 数据填充 ListView:

{"nodes":[{"node":{"title":"Article#1","id":"4"}},{"node":{"title":"Article#2","id":"3"}}]}

我的 ListView 是用以下代码构造的:

ArrayList<String> articles = new ArrayList<String>();
    try{
                    for(int i=0; i < data.length(); i++){
                        JSONObject dataObj = (JSONObject)data.get(i);
                        JSONObject record = dataObj.getJSONObject("node");
                        title = (record.getString("title"));
                        nid = (record.getString("nid"));

                        Log.i("FOUND", "title: " + title);
                        Log.i("FOUND", "nid: " + nid);

                        articles.add(title);
                    }
                }catch(JSONException j){
                    Log.e("CHECK", "Attempting to read data returned from JSONReader: " + j.toString());
                }
    ListView articlesList = (ListView)findViewById(R.id.articlesList);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(ArticlesActivity.this, R.layout.article_item, R.id.articleItem, articles);
    articlesList.setAdapter(adapter);

整个过程有效并成功列出了我的文章标题。但是,我正在尝试按照教程来帮助我在每个列表项上启用 onSelectListeners。与每篇文章标题关联的 ID 元素就是我远程获取文章内容所需的全部内容。

是否可以将我的 ArrayList 设置为包含标题和 id 数据并使用它来设置启用动态 OnSelectListener 的 ListView?

4

1 回答 1

0

正确的方法是创建一个类来保存文章名称和 id 以及您需要的任何信息。在您的自定义适配器中,您在创建视图时使用 setTag() 方法。然后在您的 onClickListener 中使用 getTag() 方法。下面我会给你一些代码snipsetss希望他们对你有帮助。

public class Article{
private String name;
private String id;

public Article(String name, String id) {
    this.name =name;
    this.id = id;

}

    public String getName() {
        return name;
    }

    public String getID() {
        return id;}
}

在您创建视图时,在您的自定义适配器类中使用 setTag 方法

       public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = inflater.inflate(R.layout.group_list, null);
TextView title = (TextView) v.findViewById(R.id.group_title);
                ...//rest of my code 

                Article article = getItem(position);
                title.setText(article.getName());
                title.setTag(article);
                v.setTag(article);
            return v;
        }

在您的点击监听器中

list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {

                Article article= (Article ) view.getTag();
                String articleID= article.getID();
}
}
于 2013-02-17T00:33:39.650 回答