2016-09-30 4 views
0

Мне нужно, чтобы у моего списка всегда был элемент трейлинг-списка, отличный от других элементов списка, даже если адаптер пуст.Как добавить дополнительный элемент списка в список?

Я попытался добавить нулевой элемент в конце набора данных в конструкторе адаптера:

mDataset.add(null); 

В методе GetView я различать между последним элементом и другими и надуть различные схемы соответственно.

Когда пользователь добавляет новый элемент списка, нужно удалить нулевой элемент в наборе данных, добавить новые данные в конце набора данных, а затем добавить еще один нулевой элемент в последнем индексе набора данных:

public void addData(String data) { 
    mDataset.remove(mDataset.indexOf(null)); 
    mDataset.add(data); 
    mDataset.add(null); 
    notifyDataSetChanged(); 
} 

Это, конечно, называется внутри адаптера. Когда я запустить приложение я получаю следующее сообщение об ошибке:

java.lang.NullPointerException: Attempt to read from field 'android.widget.TextView com.neutronstar.revu.DataAdapter$DataViewHolder.mDataTextView' on a null object reference 

Какие карты в этой линии в методе GetView() моего адаптера:

holder.mDataTextView.setText(mDataset.get(position)); 

Вот метод GetView() в адаптере :

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    long viewType = getItemId(position); 

    Log.i("SPECS ADAPTER", viewType + ""); 

    if (getCount() == 0) 
     convertView = LayoutInflater.from(mContext).inflate(R.layout.item_add_spec, null); 
    else if (viewType == NOT_LAST_ITEM) { 
     SpecViewHolder holder; 
     if (convertView == null) { 
      convertView = LayoutInflater.from(mContext).inflate(R.layout.item_spec, null); 
      holder = new SpecViewHolder(convertView); 
      convertView.setTag(holder); 
     } else 
      holder = (SpecViewHolder) convertView.getTag(); 

     holder.mSpecTextView.setText(mSpecs.get(position)); 

    } else { 
     if (convertView == null) 
      convertView = LayoutInflater.from(mContext).inflate(R.layout.item_add_spec, null); 
    } 
    return convertView; 
} 

public void addSpec(String spec) { 
    mSpecs.remove(mSpecs.indexOf(null)); 
    mSpecs.add(spec); 
    mSpecs.add(null); 
    notifyDataSetChanged(); 
} 

static class SpecViewHolder { 
    @BindView(R.id.spec_text_view) TextView mSpecTextView; 

    SpecViewHolder(View view) { 
     ButterKnife.bind(this, view); 
    } 
} 

Как исправить эту ошибку?

Благодаря

+1

В принципе, вы хотите добавить нижний колонтитул ** –

+0

Мне нужен дополнительный элемент списка, поэтому его часть списка, но она всегда отображается в нижней части списка. @Rotwang –

+0

показать ur getView() код – uguboz

ответ

0

Как сказал @Rotwang. Остановите добавление нулевого элемента и прикрепите представление нижнего колонтитула к списку, как показано ниже в действии/фрагменте.

View v = getLayoutInflater().inflate(R.layout.footer, null); 
listView.addFooterView(v); //IMPORTANT: make sure you call this before setAdapter 
listView.setAdapter(adapter); 

И не забудьте создать макет нижнего колонтитула.

+0

Работает, спасибо за помощь. –

0

Вы можете быть ImageView в вашем XML, указывая, что ListView является пустым и сделать его visibility.gone. В вашем классе адаптера проверьте, пуст ли ваш набор данных, измените видимость Visibility.visible и вид Listview на visibility.gone.

Образец короткий пример

XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context=".MainActivity"> 
<ListView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/listView"/> 
<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/imageview" 
    android:visibility="gone"/> 
</LinearLayout> 

адаптер

public class Adapter extends SomeAdapter{ 

//{ 
//constructor... 
//overriden methods 
//whatever you want... 
//} 

//place where you check if your dasaet is empty 

if(dataset.length=0){ 
listview.setVisibility(View.GONE); 
imageView.setVisibility(View.VISIBLE); 
} 
} 
+0

Я не думаю, что вы поняли вопрос. У меня есть отдельный xml-макет для последнего элемента списка. Мне нужно знать, почему эта ошибка происходит. –

Смежные вопросы