我是Android App新手。我正在开发一个需要在listView中显示图像和文本的应用程序。为此,我扩展了ListActivity。因为我使用了EfficientAdapter扩展BaseAdapter。我也设置了OnItemClickListner。但是当我在点击tany项目时尝试打开一个新屏幕时,我的应用程序在intent和startActivity方法中输出了一个NullPointer异常。
public class MyClass extends ListActivity {
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setListAdapter(new StationAdapter(this));
..
}
private static class StationAdapter extends BaseAdapter {
static LayoutInflater mYInflater;
public StationAdapter(Context context) {
mYInflater = LayoutInflater.from(context);
}
public int getCount() {
return MyArray.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null) {
holder = new ViewHolder();
convertView = myInflater.inflate(R.layout.customlister, null);
holder.title = (TextView)convertView.findViewById(R.id.myTitle);
holder.icon = (ImageView)convertView.findViewById(R.id.myIcon);
}
else {
holder = (ViewHolder)convertView.getTag();
}
holder.title.setText(MyArray[position]);
holder.icon.setImageBitmap(iconImages[position]);
convertView.setOnClickListener(new OnItemClickListener(position));
return convertView;
}
static class ViewHolder {
TextView title;
ImageView icon;
}
private class OnItemClickListener implements OnClickListener {
private int mPosition;
OnItemClickListener(int position) {
mPosition = position;
}
public void onClick(View view) {
try {
System.out.println("Clicked On Row - = " + mPosition);
Intent i = new Intent(MyCurrentClass.this,MyNewClass.class);
startActivity(i);
}
catch (Exception e) {
System.out.println("XML Pasing Excpetion = " + e);
}
}
}
}
}
以下两行:
Intent i = new Intent(MyCurrentClass.this,MyNewClass.class);
startActivity(i);
正常工作如果我直接在My Class中编写这些扩展ListActivity。但它不在这里工作。我曾尝试在OnCreate方法中设置My Intent,然后创建一个函数:
public void GoToNextScreen() {
try {
startActivity(i);
}
catch (Exception e) {
System.out.println("XML Parsing Exception = " + e);
}
}
然后在我的OnItemClickListener实现中,我调用了这个方法,但仍然是异常。请帮我解决如何在新屏幕上移动。 任何帮助将不胜感激。
提前致谢。
答案 0 :(得分:1)
您在startActivity(i)上获得NullPointerException的原因是因为private class OnItemClickListener implements OnClickListener
中未定义该方法。它在MyClass中工作正常,因为startActivity是在Activity类中定义的(ListActivity从中释放)。
要使您当前的代码正常工作,我将执行以下操作:
Intent i = new Intent(MyClass.this,MyNewClass.class);
MyClass.this.startActivity(i);
由于startActivity是在Activity类中定义的(ListActivity从中派生),因此您需要引用该类以便能够从内部类中执行该方法。
希望这有帮助!
P.S。我注意到代码中有拼写错误,因为mYInflater
中有myInflater
和StationAdapter
。