2017-06-13 14 views
1

こんにちは私は、ベースアダプタまたはアレイアダプタを拡張するカスタムアダプタを構築しようとしています。しかし両方とも私は同じエラーを受けます。ここに私のログの一部です。BaseAdapterを拡張するCustomAdapterでエラーが発生しました

Error (29111)/AndroidRuntime: Caused by: 
android.runtime.JavaProxyThrowable: System.NullReferenceException: Object 
reference not set to an instance of an object 
Error (29111)/AndroidRuntime: at app2.NoteAdapter.GetView (System.Int32 
position, Android.Views.View convertView, Android.Views.ViewGroup parent) 
[0x0002e] in <1fa21d766827459f835e8535977f72f9>:0 
Error (29111)/AndroidRuntime: at 
Android.Widget.BaseAdapter.n_GetView_ILandroid_view_View 
_Landroid_view_ViewGroup_ (System.IntPtr jnienv, System.IntPtr native__this, 
System.Int32 position, System.IntPtr native_convertView, System.IntPtr 
native_parent) [0x00018] in <d855bac285f44dda8a0d8510b679b1e2>:0 
Error (29111)/AndroidRuntime: at (wrapper dynamic-method) 
System.Object:f5ec6c83-541f-4cff-a749-2883ba3ae9b3 
(intptr,intptr,int,intptr,intptr) 
Error (29111)/AndroidRuntime:  at 
md56e50694a3408ec27ef32796f24258eb7.NoteAdapter.n_getView(Native Method) 
Error (29111)/AndroidRuntime:  at 
md56e50694a3408ec27ef32796f24258eb7.NoteAdapter.getView(NoteAdapter.java:56) 
Error (29111)/AndroidRuntime:  at 
android.widget.AbsListView.obtainView(AbsListView.java:2370) 
Error (29111)/AndroidRuntime:  at 
android.widget.ListView.measureHeightOfChildren(ListView.java:1284) 
Error (29111)/AndroidRuntime:  at 
android.widget.ListView.onMeasure(ListView.java:1192) 

カスタムアダプタのコードは、以下のいずれかです。

public class NoteAdapter:BaseAdapter<DataModelNotes> 
{ 
// Context _context; 
    List<DataModelNotes> _notes; 
    private readonly Activity _activity; 
    public NoteAdapter(Activity activity, List<DataModelNotes> notes):base() 
    { 
     _activity = activity; 

     _notes = notes; 
    } 

    public override int Count 
    { 
     get { return _notes.Count; } 
    } 

    public override long GetItemId(int position) 
    { 
     return position; 
    } 

    public override DataModelNotes this[int position] 
    { 
     get { return _notes[position]; } 
    } 


    public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     DataModelNotes note = this[position]; 
     var view = convertView; 
      if (view == null) 
     { 
      view = _activity.LayoutInflater.Inflate(Resource.Layout.custom_notes_row, null); 
      } 
     var title = convertView.FindViewById<TextView>(Resource.Id.noteTitle); 
     var summary = convertView.FindViewById<TextView>(Resource.Id.noteSummary); 

     title.Text = note.Title; 
     summary.Text = note.Summary; 
     return view; 
    } 
} 

}

と私は私のlistfragmentでやっている唯一のものは、以下の本です:

public class NoteListFragment : ListFragment 
{ 

    List<DataModelNotes> notes; 
    public NoteListFragment() 
    { 
    } 

    public override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 

    } 

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 

     notes = new List<DataModelNotes>(); 
     DataModelNotes note = new DataModelNotes(); 
     note.Id = 0; 
     note.Title = "adaadassaddsa"; 
     note.Summary = "sdfsfdsfdsdfsds"; 
     notes.Add(note); 
     NoteAdapter ad = new NoteAdapter(this.Activity as NotesMainActivity, notes); 
     this.ListAdapter = ad; 
     return base.OnCreateView(inflater, container, savedInstanceState); 
    } 

カスタムレイアウトは、2つのテキストビューを含む線形レイアウトに過ぎません。私は何が間違っているのか理解できません。私は多くのことを試しましたが、エラーは残ります。誰かが私に助けを与えることができますか?

+0

私はログから詳細を入力しました。それは56行目ですが、56行目は私のNoteAdapterクラスの終わりです – Akis

+0

GetViewメソッドの最初の行にブレークポイントを設定し、行ごとにステップを実行し、ヌルの各変数を評価します。... – SushiHangover

答えて

2

"convertView"を参照していますが、最初の呼び出しではおそらくnullになります。レイアウトを拡張し、ビュー変数として設定した直後です。ですので、次のように変更してください:

var view = convertView; 
if (view == null) 
{ 
    view = _activity.LayoutInflater.Inflate(Resource.Layout.custom_notes_row, null); 
} 
var title = view.FindViewById<TextView>(Resource.Id.noteTitle); 
var summary = view.FindViewById<TextView>(Resource.Id.noteSummary); 
+0

ええ、それは働いた。ありがとう。アプリはクラッシュしませんでしたが、何も表示されません。そして、ブレークポイントはXamarinスタジオでヒットしないので、何が起こっているのか分かりません – Akis

関連する問題