2015-09-24 4 views
0

У меня есть пользовательское listview и вы хотите вернуть/раздуть в зависимости от условия. Я хочу, чтобы строки отображались или не отображались в зависимости от состояния., возвращающий разные виды в listview

В GetView() У меня есть следующие

if (convertView == null) { 

       // Inflate the layout 
       LayoutInflater li = getLayoutInflater(); 
       convertView = li.inflate(
         R.layout.contactos_list_item, null); 

       contactViewHolder = new ContactViewHolder(); 

       contactViewHolder.imgContact = (ImageView) convertView 
         .findViewById(R.id.flag); 
       contactViewHolder.txtViewContactName = (TextView) convertView 
         .findViewById(R.id.txtView_name); 
       contactViewHolder.txtViewPhoneNumber = (TextView) convertView 
         .findViewById(R.id.txtview_number); 

       convertView.setTag(contactViewHolder); 
      } else { 
       contactViewHolder = (ContactViewHolder) convertView.getTag(); 
      } 

и я хочу, чтобы вернуть

if(condition) 
{ 
    return convertView; 
} 
else 
{ 
    LayoutInflater li = getLayoutInflater(); 
    convertView=li.inflate(R.layout.row_null,null); 
    return convertView; 
} 

я есть соответствующий макет XML, но приложение перестает работать. что я должен изменить, так что

+0

Вы получаете ошибку? Если так, то, что это. – ChrisStillwell

ответ

0

Пока вы не раздуваете новый макет в if условиях, я уверен, вы получаете исключение NullPointerException, потому что у вас может быть неправильный макет из механизма рециркуляции.

Изменить код вроде этого:

@Override 
public View getView(int position, View convertview, ViewGroup parent) { 

    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    if (condition) { 
     convertview = inflater.inflate(R.layout.first_layout, null); 
     //do your stuff 

    } else { 
     convertview = inflater.inflate(R.layout.second_layout, null); 
     // do your stuff 
    } 
    return convertview; 
}