2016-09-23 95 views
1

新手在这里。 我使用Xamarin第一应用有例外:Xamarin中的Java.Lang.NullPointerException

Java.Lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()' on a null object reference 

MainActivity:

public class MainActivity : Activity 
{ 
    List<TypeOfClasses> listOfClasses; 
    ListView listView; 
    ListArrayAdapter adapter;  
    protected override void OnCreate(Bundle savedInstanceState) 
    { 
      base.OnCreate(savedInstanceState); 
      SetContentView(Resource.Layout.Main); 
      Button button = FindViewById<Button>(Resource.Id.myButton); 
      listOfClasses = new List<TypeOfClasses>(); 
      listView = FindViewById<ListView>(Resource.Id.listView);  
      adapter = new ListArrayAdapter(this, Resource.Layout.List_item, listOfClasses); 
      listView.Adapter = adapter; 
      button.Click += delegate 
      { 
       var intent = new Intent(this, typeof(SecondActivity)); 
       StartActivityForResult(intent, 0); 
      }; 
    } 

    protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) 
    { 
     base.OnActivityResult(requestCode, resultCode, data); 
     TypeOfClasses toc = new TypeOfClasses(); 
     if (resultCode= Result.Ok) 
     { 
      toc.Subj = data.GetStringExtra("SUBJECT"); 
      toc.Lect = data.GetStringExtra("LECTURER"); 
      toc.Date = data.GetStringExtra("DATE"); 
      listOfClasses.Add(toc); 
      adapter.NotifyDataSetChanged(); 
    } 
} 

}

类SecondActivity,在MainActivity传送数据:

public class SecondActivity : Activity 
{ 
    public string value; 
    protected override void OnCreate(Bundle savedInstanceState) 
    { 
      base.OnCreate(savedInstanceState); 
      SetContentView(Resource.Layout.Second); 
      EditText edtTxtSubj = FindViewById<EditText>(Resource.Id.editTextSubject); 
      EditText edtTxtDt = FindViewById<EditText>(Resource.Id.editTextDate); 
      EditText edtTxtLec = FindViewById<EditText>(Resource.Id.editTextLecturer); 
      Button buttonAdd = FindViewById<Button>(Resource.Id.buttonAdd); 
      buttonAdd.Click += delegate 
      { 
       var intentSecond = new Intent(this, typeof(SecondActivity)); 
       intentSecond.PutExtra("SUBJECT", edtTxtSubj.Text.ToString()); 
       intentSecond.PutExtra("LECTURER", edtTxtLec.Text.ToString()); 
       intentSecond.PutExtra("DATE", edtTxtDt.Text.ToString()); 
       SetResult(Result.Ok, intentSecond); 
       Finish(); 
      }; 
     } 

}

ListArrayAdapter:

public class ListArrayAdapter : ArrayAdapter<TypeOfClasses> 
{ 
    List<TypeOfClasses> list; 
    Activity context; 
    int resource; 
    public ListArrayAdapter(Activity context, int resource, List<TypeOfClasses> items) 
     : base(context, resource, items) 
    { 
     this.context = context; 
     this.list = items; 
     this.resource = resource; 
    } 

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

    public override View GetView(int position, View convertView, ViewGroup parent) 
    {  
      View view = convertView; 
      if (view == null) 
       view = context.LayoutInflater.Inflate(LabProject1.Resource.Layout.List_item, null); 
      var txtSubj = view.FindViewById<TextView>(LabProject1.Resource.Id.textViewSubject); 
      var txtLect = view.FindViewById<TextView>(LabProject1.Resource.Id.textViewLecturer); 
      var txtDate = view.FindViewById<TextView>(LabProject1.Resource.Id.textViewDate); 
      txtSubj.Text = list[position].Subj; 
      txtLect.Text = list[position].Lect; 
      txtDate.Text = list[position].Date; 
      return convertView; 
    } 
} 

类TypeOfClasses包含像SUBJ,LECT,日期一个属性。

Main.axml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <Button 
     android:id="@+id/myButton" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="ADD ELEMENTS" /> 
    <ListView 
     android:minWidth="25px" 
     android:minHeight="25px" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/listView" /> 
    <ListView 
     android:minWidth="25px" 
     android:minHeight="25px" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/listView3" /> 
    <ListView 
     android:minWidth="25px" 
     android:minHeight="25px" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/listView2" /> 
    <ListView 
     android:minWidth="25px" 
     android:minHeight="25px" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/listView1" /> 
</LinearLayout> 

Second.axml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TextView 
     android:text="SUBJECT" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/textView1" /> 
    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/editTextSubject" /> 
    <TextView 
     android:text="LECTURER" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/textView2" /> 
    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/editTextLecturer" /> 
    <TextView 
     android:text="DATE" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/textView3" /> 
    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/editTextDate" /> 
    <TextView 
     android:text="TYPE OF SUBJECT" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/textView4" /> 
    <Button 
     android:text="ADD A NEW EVENT" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/buttonAdd" /> 
</LinearLayout> 

List_item.axml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TextView 
     android:text="Text" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/textViewSubject" /> 
    <TextView 
     android:text="Text" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/textViewLecturer" /> 
    <TextView 
     android:text="Text" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/textViewDate" /> 
    <TextView 
     android:text="Text" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/textViewType" /> 
</LinearLayout> 
+0

您可以如何添加视图? – Sherlock

+0

@Sherlock你能说得更简单吗? – Vadim

+0

我还需要查看xml的视图 – Sherlock

回答

2

ListArrayAdapter类,你正在返回convertView。当没有视图从中转换时,此变量为null。你需要来回报您的view变量:

public override View GetView(int position, View convertView, ViewGroup parent) 
{  
    View view = convertView; 
    //... your existing code 
    //return your view 
    return view; 
} 

我想这只是一个小疏忽,在方法内部的整体逻辑是正确的(当它不是null,因为它采用的是Android推荐convertView被重复使用)。

+0

非常感谢! – Vadim

+0

不客气:-)。如果它解决了问题,请将我的答案标记为解决问题的答案:-)。 –

相关问题