2016-09-30 13 views
0

アダプタが空であっても、他のリスト項目とは異なる後続のリスト項目を常に持つためには、リストビューが必要です。余分なリストアイテムをリストビューに追加するには?

Iアダプタコンストラクタにおけるデータセットの最後にNULL項目を追加しようとしている:GetViewメソッドで

mDataset.add(null); 

私が最後の項目と他とを区別し、それに応じて異なるレイアウトを膨張させます。

ユーザーは、私は、データセット内のNULLの項目を削除し、新たなデータをデータセットの終わりを追加し、データセットの最後のインデックスに別のヌル項目を追加する必要があり、新しいリスト項目を追加します。

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

これはもちろんアダプター内で呼び出されます。私のアダプタのgetViewメソッド()メソッドでは、この行にマップ

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

:ここ

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が言ったように。ヌルアイテムの追加をやめ、フッタビューをアクティビティ/フラグメントの下のリストビューに追加します。

また、フッターレイアウトを作成しないでください。

+0

作業していただきありがとうございます。 –

0

あなたはリストビューが空であることを指し、あなたのXMLでImageViewのを持っており、そのvisibility.goneを作ることができます。あなたのアダプタクラスで、あなたのデータセットが空であるかどうかを確認し、Imageview 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レイアウトを持っています。なぜこのエラーが発生しているのかを知る必要があります。 –

関連する問題