startActivity () не работает с ItemClick пользовательского ListView? - PullRequest
0 голосов
/ 19 февраля 2011

Я новичок в Android App.Я работаю над приложением, которое должно отображать изображение и текст в listView.Для этого я должен был расширить ListActivity.В этом я использовал EfficientAdapter, расширяющий BaseAdapter.Я также установил OnItemClickListner.Но когда я пытаюсь открыть новый экран, нажимая на любой элемент, мое приложение вызывает исключение NullPointer в методе intent и startActivity.

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.Но это не работает здесь.Я попытался установить My Intent в методе OnCreate, а затем создать функцию:

 public void GoToNextScreen() {
    try {

        startActivity(i);
    }
    catch (Exception e) {
        System.out.println("XML Parsing Exception = " + e);
    }
}

Затем в своей реализации OnItemClickListener я вызвал этот метод, но все еще исключение.Пожалуйста, помогите мне, как я могу перейти на новый экран.Любая помощь будет принята с благодарностью.

Заранее спасибо.

1 Ответ

1 голос
/ 20 февраля 2011

Причина, по которой вы получаете исключение NullPointerException для вашего startActivity (i), заключается в том, что этот метод не определен в вашем private class OnItemClickListener implements OnClickListener.Он отлично работает в MyClass, потому что startActivity определена в классе Activity (из которого происходит ListActivity).

Чтобы ваш текущий код работал, я бы сделал следующее:

Intent i = new Intent(MyClass.this,MyNewClass.class);    
MyClass.this.startActivity(i);

В качестве startActivityопределяется в классе Activity (из которого происходит ListActivity), вам нужно сослаться на этот класс, чтобы иметь возможность выполнять этот метод из внутренних классов.

Надеюсь, это поможет!

PS Я заметилчто у вас есть опечатка в коде, как у вас mYInflater и myInflater в вашем StationAdapter.

...