0

Я разбираю XML внутри ListFragment, он работает нормально, но OnListItemClick только бросает последний элемент, я искал, но я не нашел ничего, что соответствует моему делу.Получение только последнего элемента списка List

Это внутри 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); } });

Спасибо!

+0

Hi @MikeM. добавлено, спасибо – FilipeOS

+0

Я замечаю, что даже на моем другом адаптере (почти равном) это происходит внутри адаптера, когда я устанавливаю 'setOnClickListener' для' ImageView'. Можете ли вы привести пример? Я немного нуб. – FilipeOS

+0

@MikeM. Можете ли вы проверить мой последний код, пожалуйста? Я не получаю эту должность, потому что она должна работать нормально? Так как он внутри адаптера. Он отображает всю информацию правильно, за исключением этого clickListener – FilipeOS

ответ

0

Пожалуйста, попробуйте новости = newss.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); 
}` 
+0

Спасибо! Можете ли вы мне помочь только с последним кодом, который я разместил, пожалуйста? Я прокомментировал MikeM, что не работает. I – FilipeOS

+0

Извините за задержку, вы можете использовать тот же news = newss.get (position) в своем другом адаптере. вы можете получить postion из метода getview и использовать значение из этой позиции. – Ashish

+0

Можете ли вы сделать пример, пожалуйста? – FilipeOS