startActivity()不能使用Custom ListView的ItemClick?

时间:2011-02-19 10:07:40

标签: android android-activity android-intent listactivity

我是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实现中,我调用了这个方法,但仍然是异常。请帮我解决如何在新屏幕上移动。 任何帮助将不胜感激。

提前致谢。

1 个答案:

答案 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中有myInflaterStationAdapter