2016-02-25 2 views
-1

Android намерения дать NullPointerException в случае GridView setonitemclickListenerандроида намерение дать NullPointerException в GridView случае setonitemclickListener

public class GridFragment extends Fragment { 

    GridView mGridView; 
    private GridAdapter mGridAdapter; 
    GridItems[] gridItems = {}; 
    private Activity activity; 

    public GridFragment(GridItems[] gridItems, Activity activity) { 
     this.gridItems = gridItems; 
     this.activity = activity; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     View view; 
     view = inflater.inflate(R.layout.grid, container, false); 
     mGridView = (GridView) view.findViewById(R.id.gridView); 
     return view; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     if (activity != null) { 

      mGridAdapter = new GridAdapter(activity, gridItems); 
      if (mGridView != null) { 
       mGridView.setAdapter(mGridAdapter); 
      } 

      mGridView.setOnItemClickListener(new OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

        PackageManager pacmanager=getActivity().getPackageManager(); 

        Intent i=pacmanager.getLaunchIntentForPackage(gridItems[position].title.toString()); 
        getActivity().startActivity(i); 

       } 
      }); 
     } 
    } 

Моя ошибка заключается в следующем.

java.lang.NullPointerException

Я получаю ошибку на линии,

getActivity().startActivity(i); 

Что случилось?

+0

Опубликовать полный след стека. который равен нулю? деятельности или намерения? – njzk2

ответ

0

Вы должны заменить getActivity().startActivity(i); для MainActivity.this.startActivity(i);


быстро исправить

mGridView.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 
     PackageManager pacmanager=getActivity().getPackageManager(); 
     Intent i=pacmanager.getLaunchIntentForPackage(gridItems[position].title.toString()); 
     MainActivity.this.startActivity(i); 

    } 
    }); 
+0

Спасибо xoce, но его не работает, это дает мне это «Нет закрывающего экземпляра типа MainActivity доступен в области видимости» –

+0

Хорошо, спасибо, я получил свою ошибку –

0

Если ваше намерение правильно, чем это может быть ваш getActivity() возвращает нуль,

вы можете попробуйте mainactivity.startActivity (i);

Основная активность вашего партнера;

@Override 
public void onAttach(Activity activity) { 
    mainActivity = (YourParentActivity) activity; 

    super.onAttach(activity); 
} 
0

Если вы хотите начать Activity, когда этот фрагмент прикрепляется к контейнеру деятельности, то вы должны использовать метод onAttach.

pubic void onAttach(Activity activity) { 
    super.onAttach(activity); 
//use this activity 
} 

Для запуска другой деятельности, вы можете использовать activity.startActivity() и .

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