L'activité se compose de ListView
, les données sont récupérées à partir du serveur à l'aide de volly.Activité Crash lorsque vous faites défiler vers le haut Listview
Lors du défilement ListView
, une erreur s'est produite.
Dernière rangée de listview est défini comme bouton en utilisant ce code:
if (position == datamodel.size() - 1)
{
convertView = inflater.inflate(R.layout.list_button, parent, false);
TextView mytxt =(TextView)convertView.findViewById(R.id.txt_btn_more);
mytxt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent myint = new Intent(context,Home.class);
editor.putString("btn_more_cliked","yes");
editor.commit();
myint.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myint);
}
});
return convertView;
ListView
fonctionne bien quand défilement vers le bas, mais après avoir fait défiler vers le bas complet ListView
quand à nouveau défiler vers le haut, erreur se produit.
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.kachhua.blog.Home_ListAdapter.getView(Home_ListAdapter.java:92)
at android.widget.AbsListView.obtainView(AbsListView.java:2346)
at android.widget.ListView.makeAndAddView(ListView.java:1875)
sur la ligne 92 i ai ce code
title1.setText(m.getPost_title());
ici est mon code toute la liste adpater
public class Home_ListAdapter extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
private List<DataModel_ListPost> datamodel;
public SharedPreferences pref;
public SharedPreferences.Editor editor;
public Home_ListAdapter(Context context, List<DataModel_ListPost> datamodel) {
this.context = context;
this.datamodel = datamodel;
}
@Override
public int getCount() {
return datamodel.size();
}
@Override
public Object getItem(int position) {
return datamodel.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
pref = context.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
editor = pref .edit();
if (inflater == null)
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(position == datamodel.size() - 1) // last element is a Button
{
convertView = inflater.inflate(R.layout.list_button, parent, false);
TextView mytxt =(TextView)convertView.findViewById(R.id.txt_btn_more);
mytxt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent myint = new Intent(context,Home.class);
editor.putString("btn_more_cliked","yes");
editor.commit();
myint.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myint);
}
});
return convertView;
}
else
{
if (convertView == null)
{
convertView = inflater.inflate(R.layout.single_row_home_listview, null);
}
else
{
TextView title1 = (TextView) convertView.findViewById(R.id.txt_title_text);
TextView date =(TextView)convertView.findViewById(R.id.date_in_single_row);
DataModel_ListPost m = datamodel.get(position);
title1.setText(m.getPost_title());
date.setText(m.getPost_date());
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String id = datamodel.get(position).getPost_id();
String title= datamodel.get(position).getPost_title();
String content= datamodel.get(position).getPost_content();
String link = datamodel.get(position).getPost_url();
String date = datamodel.get(position).getPost_date();
String modified_date = datamodel.get(position).getPost_modified_date();
editor.putString("id_from_list_adapter",id);
editor.putString("title_from_list_adapter",title);
editor.putString("content_from_list_adapter",content);
editor.putString("post_url_from_list_adapter",link);
editor.putString("post_date_from_list_adapter",date);
editor.putString("post_modified_date_from_list_adapter",modified_date);
editor.commit();
Intent myint = new Intent(context,Post_Activivty.class);
myint.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myint);
}
});
}
return convertView;
}
}
}
ici est le code de mon listview
postlist=(ListView)findViewById(R.id.postList_home);
adapter = new Home_ListAdapter(getApplicationContext(), datamodel);
postlist.setAdapter(adapter);
Il est possible que la position puisse être nulle, pour la maintenir utiliser 'Holder' dans votre' Home_ListAdapter', plus d'infos ici: https://developer.android.com/training/improving-layouts/smooth-scrolling. html – Vikrant
Vérifiez que les données météo sont nulles ou non, il est possible que les données que vous obtenez soient nulles à cette position. –
Je viens de le déboguer et je trouve qu'il y a des données pour toutes les positions. – user7824858