【发布时间】: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;
}
}`
ImageView 和 setOnClickListner 在我的另一个适配器中存在同样的问题:
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