【问题标题】:Java.Lang.NullPointerException in XamarinXamarin 中的 Java.Lang.NullPointerException
【发布时间】:2016-09-23 07:58:28
【问题描述】:

这里是新手。 我第一个使用 Xamarin 的应用程序有异常:

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

主活动:

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;
    }
}

Class TypeOfClasses 包含诸如 Subj、Lect、Date 之类的属性。

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>

第二个.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>

【问题讨论】:

  • 视图怎么样,可以加吗?
  • @Sherlock 你能说得更简单点吗?
  • 我还需要查看 xml 以获取视图
  • @Sherlock 我添加了它

标签: c# exception xamarin xamarin.android


【解决方案1】:

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;
}

我想这只是一个小小的疏忽,方法内部的整体逻辑是正确的(convertView 在不是null 时被重用,正如在 Android 中推荐的那样)。

【讨论】:

  • 非常感谢!
  • 不客气 :-) 。如果它解决了问题,请将我的答案标记为解决问题的答案:-)。
猜你喜欢
  • 1970-01-01
  • 2015-06-28
  • 2013-01-14
  • 2014-02-09
  • 2015-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多