2017-07-25 4 views
0

私はListViewを持っています。GridViewに行きます。OnItemCLiclickリスナー。私はそれを解決することはできませんアダプタを入れて例外があります。GridView:ヌルオブジェクトリファレンスで仮想メソッド.view.View android.view.LayoutInflater.inflate(int、android.view.ViewGroup) 'を呼び出そうとしました

リストビューは断片であり、非常にうまくいきます!

例外がある:

java.lang.NullPointerExceptionが:で仮想メソッドを呼び出すための試み 'android.view.View android.view.LayoutInflater.inflate(INT、android.view.ViewGroup)' GridViewアダプタでこの行でcom.rt_no.myprogect.ui.adapter.CareerImageAdapter.getView(CareerImageAdapter.java:52)でヌルオブジェクト参照

convertView = layoutInflater.inflate(R.layout.career_grid_view, null); 

リストビュー:

public class CitiesFragment extends Fragment { 
    private static final String TAG ="CitiesFragment"; 

    private ListView cityList; 
    private ArrayList<City> cities; 
    private CitiesAdapter citiesAdapter; 
    private CitiesFragmentListener listener; 

    private Context context; 

    private GridView gridView; 

    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     Log.d(TAG, "onAttach_CitiesFragment"); 
     listener = (CitiesFragmentListener) context; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     Log.d(TAG, "onCreateView_CitiesFragment"); 
     View view = inflater.inflate(R.layout.cities_list_view_fragment, null); 
     return view; 
    } 

    private ArrayList<City> initCities(){.....} 

    private void initGridView(Fragment fragment){ 
     Log.d(TAG, "CitiesFragment_initGridView"); 
     FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
     fragmentTransaction.replace(R.id.container,fragment); 
     fragmentTransaction.addToBackStack("fragment"); 
     fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
     fragmentTransaction.commit(); 
    } 


    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     Log.d(TAG, "onViewCreated_CitiesFragment"); 
     cities = initCities(); 
     cityList = (ListView) view.findViewById(R.id.cityList); 
     citiesAdapter = new CitiesAdapter(getActivity(), cities); 
     cityList.setAdapter(citiesAdapter); 
     cityList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Log.d(TAG, "onItemClick_CitiesFragment position : " + cities.get(position).getCityName()); 
       GridViewFragment fragment = new GridViewFragment(); 
       initGridView(fragment); 
      } 
     }); 
    } 

のGridView:

public class GridViewFragment extends Fragment { 
    private static final String TAG = "GridViewFragment"; 

    private CitiesFragmentListener listener; 
    private GridView gridView; 
    private CareerImageAdapter careerImageAdapter; 
    private int position; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { 
     Log.d(TAG, "onCreateView_GridViewFragment"); 
     View view = inflater.inflate(R.layout.career_grid_view, null); 
     gridView = (GridView) view.findViewById(R.id.careerGridView); 

     return view; 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     Log.d(TAG, "onViewCreated_GridViewFragment"); 
     gridView = (GridView) view.findViewById(R.id.careerGridView); 
     gridView.setAdapter(new CareerImageAdapter(getActivity())); 
     gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Log.d(TAG, "onItemClick_GridViewFragment position : " + position); 

       // go to workers_list_view_fragment layout 

      } 
     }); 
    } 

GridViewのアダプタ:

public class CareerImageAdapter extends BaseAdapter { 
    private static final String TAG = "CareerImageAdapter"; 

    private Context mContext; 
    private LayoutInflater layoutInflater; 

    public CareerImageAdapter (Context c){ 
     mContext = c; 
    } 

    @Override 
    public int getCount() { 
     return ImageIdes.length; 
    } 

    @Override 
    public CareerImageAdapter getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView ; 

     if (convertView == null){ 
      convertView= layoutInflater.inflate(R.layout.career_grid_view, null); 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(180, 180)); 
      imageView.setScaleType(ImageView.ScaleType.FIT_END); 
      imageView.setPadding(8, 8, 8, 8); 
     }else { 
      imageView = (ImageView) convertView; 
     } 
     imageView.setImageResource(ImageIdes[position]); 
     return convertView; 
    } 

    private Integer[] ImageIdes = 
      { 
       R.drawable.afar,R.drawable.asbaka,R.drawable.bnya, 
       R.drawable.cnstractors,R.drawable.doors,R.drawable.etom, 
       R.drawable.floring,R.drawable.foxy,R.drawable.garnolet, 
       R.drawable.gaz,R.drawable.geves,R.drawable.ginoon, 
       R.drawable.halbashateven,R.drawable.hashmal,R.drawable.instltsya, 
       R.drawable.kvesatshatyah,R.drawable.mazgan,R.drawable.meshlowah, 
       R.drawable.pargolot,R.drawable.pegom,R.drawable.pinoyafpa, 
       R.drawable.robah,R.drawable.tyah, 
      }; 
} 

答えて

2

layoutInflaterが初期化されることはありません。 CareerImageAdapterコンストラクタでこれを追加します。

layoutInflater = LayoutInflater.from(c);

+0

どうもありがとうございました。私はそれをしていた、私は別の例外がキャスト: 'imageView =(ImageView)convertView; 'i set:' imageView =(ImageView)convertView.getTag(); 'ithe例外は:' java.lang.NullPointerException:仮想メソッド 'void android.widget.ImageView.setImageResource(int)'をnullで呼び出そうとしていますオブジェクト参照 'の行です。' imageView.setImageResource(ImageIdes [position]); ' – hasan

+0

助けが得られた場合は、回答としてマークしてください。あなたの他のクラッシュについては、あなたはそのキャストをすることはできません。アダプタを確認する必要があります。 https://www.javacodegeeks.com/2013/09/android-viewholder-pattern-example.htmlの例を示します。また、古いGridViewではなくRecyclerViewを使用することをお勧めします。 – allo86

+0

あなたが私を助けることができるなら、私は別の例外がありますか? – hasan

関連する問題

 関連する問題