gpt4 book ai didi

android - ListView:空指针异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:11:46 25 4
gpt4 key购买 nike

美好的一天。我的 android 项目特别是 listview 有一些问题。我尝试在此站点的此处搜索其他信息,并实现了一些答案。但是,它仍然不起作用。

错误具体是

NullPointerException at line 76 at MainActivity

这是我的 MainActivity 的代码

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

public class MainActivity extends Activity {

final ArrayList<String> studentName = new ArrayList<String>();

ArrayAdapter<String> aa;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);



ListView myList = (ListView) findViewById(R.id.listName);

aa = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, studentName);

myList.setAdapter(aa);


//droid.R.id.list;

//add
Button bAdd = (Button) findViewById(R.id.addstudent);
bAdd.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
startActivity(new Intent("android.intent.action.ADDSTUDENTS"));
}
});


//edit

Button bEdit = (Button) findViewById(R.id.editstudent);
bEdit.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View x) {
startActivity(new Intent("android.intent.action.EDITSTUDENTS"));
}
});

//edit

Button bDelete = (Button) findViewById(R.id.deletestudent);
bDelete.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View x) {
startActivity(new Intent("android.intent.action.DELETESTUDENTS"));
}
});


}

public ArrayList<String> getArray(){
return studentName;
}

public void notifyArray(){
aa.notifyDataSetChanged();
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}

}

顺便说一句,第 76 行是

aa.notifyDataSetChanged();

这是我的 AddStudents 类的代码

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class AddStudents extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

setContentView(R.layout.add_student);

Button bAddStudents = (Button) findViewById(R.id.add);
final EditText et = (EditText) findViewById(R.id.student_name);

bAddStudents.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {

MainActivity as = new MainActivity();

as.getArray().add(et.getText().toString());
as.notifyArray();
finish();

}


});

Button bBack = (Button) findViewById(R.id.backadd);

bBack.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {

finish();

}
});


}

}

而带有 ListView 的xml部分是

 <ListView
android:id="@+id/listName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >

</ListView>

我希望你能帮助我,因为我也想知道我的错误是什么。如果你愿意,我可以添加其他信息。

最佳答案

在您的 AddStudents 类中,您在实例化 MainActivity 之后立即调用 notifyArray()MainActivity.onCreate() 不会仅仅通过实例化它来调用。

实例化您的 MainActivity 可能不是您想要的(因为该对象将在 onClick 处理程序完成后直接处理)。

您想要的是访问 MainActivity 的现有实例。为此,将对当前实例的引用添加到 MainActivity 类的静态成员中,例如

public class MainActivity extends Activity {
public static MainActivity activity;

@Override
protected void onCreate(Bundle savedInstanceState) {
activity = this;
}
}

然后在您的AddStudent 类中通过

访问它
MainActivity.activity.notifyArray()

这不是解决问题的最佳方法,但只要您可以确保只有一个 MainActivity 实例,它就可以工作。 (如果不是,您可以使数组本身成为静态的;或者为它创建一个 Singleton 包装类。)

关于android - ListView:空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14195646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com