2014-01-16 2 views
0

У меня есть этот код, но приложение выходит из строя на линии setadapter. Я действительно не понимаю, потому что я установил adptater новым массивом.ArrayAdapter java.lang.NullPointerException

Я пробовал другие способы, но никто не работает!

Кстати, этот код находится в Фрагменте, а не в действии!

У вас есть идея, что произойдет?

public class Fragment_product_list extends Fragment{ 

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

     final ListView listview = (ListView) getActivity().findViewById(R.id.list_product); 
     String[] values = new String[] { "item1" , "item2" , "item3" , "item4" , "item5" , "item6" , "item7" }; 

     final ArrayList<String> list = new ArrayList<String>(); 
     for (int i = 0; i < values.length; ++i) { 
      list.add(values[i]); 
     } 
     final ArrayAdapter adapter = new ArrayAdapter(getActivity(), android.R.layout.list_content , list); 

     listview.setAdapter(adapter); /*app crash here*/ 
     } 

     private class StableArrayAdapter extends ArrayAdapter<String> { 

     HashMap<String, Integer> mIdMap = new HashMap<String, Integer>(); 

     public StableArrayAdapter(Context context, int textViewResourceId, 
           List<String> objects) { 
     super(context, textViewResourceId, objects); 
     for (int i = 0; i < objects.size(); ++i) { 
      mIdMap.put(objects.get(i), i); 
     } 
    } 

    @Override 
    public long getItemId(int position) { 
     String item = getItem(position); 
     return mIdMap.get(item); 
    } 

    @Override 
    public boolean hasStableIds() { 
     return true; 
    } 
    } 
} 

Спасибо!

+2

Проверьте, что 'listview' не' null'. –

+0

Является ли listView внутри Activity? – NickF

+0

Hum .. Я не понимаю, я поставил listview здесь 'final ListView listview = (ListView) getActivity(). FindViewById (R.id.list_product);' поэтому listview не является нулевым .. (Извините, что я новичок в android) – taspai

ответ

2

Фрагмент зрения инфляция происходит в onCreateView.
Предлагаю вам посмотреть этот фрагмент example и узнать больше об этом жизненном цикле.

0

На всякий случай вы не получили ответ NickF, вот решение: Переопределите метод onCreateView в своем фрагменте и сделайте следующее.

public class Fragment_product_list extends Fragment{ 
     @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
       View rootView = inflater.inflate(R.layout.your_layout, container, 
       false); 
       ListView listView = (ListView) rootView.findViewById(R.id.list_product); 

       //Rest of the code 
     } 
}