2017-04-25 2 views
1

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); 
+0

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

+0

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. –

+0

Je viens de le déboguer et je trouve qu'il y a des données pour toutes les positions. – user7824858

Répondre

0

S'il vous plaît Déboguer sur cette ligne:

DataModel_ListPost m = datamodel.get(position); 
title1.setText(m.getPost_title()); 

Il y a des chances que pour toute position spécifique m est nul.

+0

je le débogue et j'ai des données pour toutes les positions. Y a-t-il une autre raison pour un accident? – user7824858

0

Pourriez-vous s'il vous plaît essayer de supprimer cette condition

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); 

et l'initialisation convertView à chaque fois avant d'initialiser TextViews de TITLE1 et la date.

+0

Cela a-t-il fonctionné pour vous? – Aditi