【问题标题】:Getting only last item of List View仅获取列表视图的最后一项
【发布时间】:2016-08-24 00:10:26
【问题描述】:

我已经在 ListFragment 中解析了一个 XML,它工作正常,但 OnListItemClick 只抛出了最后一项,我已经搜索过,但没有找到任何符合我的情况的内容。

这是在onPostExecute里面:

        XMLDOMParser parser = new XMLDOMParser();
        InputStream stream = new ByteArrayInputStream(xml.getBytes());
        Document doc = parser.getDocument(stream);

        NodeList nodeList = doc.getElementsByTagName(KEY_ITEM);

        newss = new ArrayList<News>();
        news = null;
        for (int i = 0; i < nodeList.getLength(); i++) {
            news = new News();
            Element e = (Element) nodeList.item(i);
            news.setId(parser.getValue(e, KEY_ID));
            news.setDate(parser.getValue(e, KEY_DATE));
            news.setTitle(parser.getValue(e, KEY_TITLE));
            news.setDescription(parser.getValue(e, KEY_DESC));
            newss.add(news);
        }

        listViewAdapter = new NewsAdapter(getActivity(), newss);
        getListView().setAdapter(listViewAdapter);

        pDialog.dismiss();

OnItemClick 在同一个片段内:

`@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    Toast.makeText(getActivity(), "List: "+news.getId(), Toast.LENGTH_SHORT).show();
    Intent in = new Intent(getActivity(), SingleNewsActivity.class);
    in.putExtra(KEY_ID, news.getId());
    in.putExtra(KEY_DATE, news.getDate());
    in.putExtra(KEY_TITLE, news.getTitle());
    in.putExtra(KEY_DESC, news.getDescription());
    startActivity(in);
}`

我的NewsAdapter

public class NewsAdapter extends BaseAdapter { Activity context; List<News> newss; public NewsAdapter (Activity context, List<News> newss) { this.context = context; this.newss = newss; }

// private View Holder class
private class ViewHolder {
    TextView tvNewsDate;
    TextView TvNewsTitle;
}

public int getCount() {
    return newss.size();
}

public Object getItem(int position) {
    return newss.get(position);
}

public long getItemId(int position) {
    return newss.indexOf(getItem(position));
}

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    LayoutInflater inflater = context.getLayoutInflater();

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.news_item, null);
        holder = new ViewHolder();
        holder.tvNewsDate = (TextView) convertView.findViewById(R.id.tvNewsDate);
        holder.TvNewsTitle = (TextView) convertView.findViewById(R.id.tvNewsTitle);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    News newss = (News) getItem(position);

    holder.tvNewsDate.setText(newss.getDate());
    holder.TvNewsTitle.setText(newss.getTitle());

    return convertView;
}

}`

ImageViewsetOnClickListner 在我的另一个适配器中存在同样的问题:

holder.ivGPS.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Uri gmmIntentUri = Uri.parse("google.navigation:q=" + parkCoordinates); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); context.startActivity(mapIntent); } });

谢谢!

【问题讨论】:

  • 嗨@MikeM。已添加,谢谢
  • 我注意到,即使在我的另一个适配器(几乎相同)上,当我将 setOnClickListener 设置为 ImageView 时,适配器内部也会发生同样的情况。你能举个例子吗?我有点菜鸟。
  • @MikeM。你能检查我的最后一个代码吗?我没有得到这个职位,因为它应该可以正常工作,对吧?因为它在适配器内部。它正确显示除此 clickListener 之外的所有信息
  • @MikeM。我已将它(holder.ivGPS.setTag(position);)放在 setOnClickListener 之前,但无法正常工作。抱歉,您能帮忙吗?

标签: android listview xml-parsing android-adapter android-listfragment


【解决方案1】:

请尝试 新闻 = news.get(位置) 并在你的 onListItemClick 中使用它可能会起作用..

  `@Override
public void onListItemClick(ListView l, View v, int position, long id) {
  news = newss.get(position)
    Intent in = new Intent(getActivity(), SingleNewsActivity.class);
    in.putExtra(KEY_ID, news.getId());
    in.putExtra(KEY_DATE, news.getDate());
    in.putExtra(KEY_TITLE, news.getTitle());
    in.putExtra(KEY_DESC, news.getDescription());
    startActivity(in);
}`

【讨论】:

  • 谢谢!你能帮我解决我放的最后一个代码吗?我已经向 MikeM 评论了什么不起作用。我
  • 抱歉耽搁了,您可以在其他适配器中使用相同的 news = newss.get(position)。您可以从 getview 方法获取位置并使用该位置的值。
  • 你能举个例子吗?
  • 使用 getview 方法中的位置获取 parkCoordinates,并在 onclick 中将其传递给谷歌导航。发布您的第二个适配器
  • 它在同一个适配器上,我已经把它放在我的问题上,在底部,谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 2022-01-17
  • 2018-04-22
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多