0

Так что я пытаюсь реализовать галерею внутри фрагмента после определенного урока с некоторыми изменениями на мой own.However я не могу назвать getActivity() здесь, в моем коде:Почему я не могу назвать getActivity()?

Вот класс GalleryFragment :

public class GalleryFragment extends Fragment { 

    private Utils utils; 
    private ArrayList<String> imagePaths = new ArrayList<String>(); 
    private GridViewImageAdapter adapter; 
    private GridView gridView; 
    private int columnWidth; 


    public GalleryFragment() { 
     // Required empty public constructor 
    } 

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


    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // View rootView = inflater.inflate(R.layout.fragment_gallery, container, false); 
     //Inflate the layout for this fragment 
     // return rootView; 
     View rootView = inflater.inflate(R.layout.fragment_gallery, container, false); 
     GridView gridView = (GridView) rootView.findViewById(R.id.grid_view); 

     // Instance of ImageAdapter Class 
     gridView.setAdapter(new GridViewImageAdapter(getActivity())); 
     gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View v, 
            int position, long id) { 

       // Sending image id to FullScreenActivity 
       Intent i = new Intent(getActivity(), FullScreenViewActivity.class); 
       // passing array index 
       i.putExtra("id", position); 
       startActivity(i); 
      } 
     }); 
    return rootView; 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
    } 

    private void InitilizeGridLayout() { 
     Resources r = getResources(); 
     float padding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
       AppConstant.GRID_PADDING, r.getDisplayMetrics()); 

     columnWidth = (int) ((utils.getScreenWidth() - ((AppConstant.NUM_OF_COLUMNS + 1) * padding))/AppConstant.NUM_OF_COLUMNS); 

     gridView.setNumColumns(AppConstant.NUM_OF_COLUMNS); 
     gridView.setColumnWidth(columnWidth); 
     gridView.setStretchMode(GridView.NO_STRETCH); 
     gridView.setPadding((int) padding, (int) padding, (int) padding, 
       (int) padding); 
     gridView.setHorizontalSpacing((int) padding); 
     gridView.setVerticalSpacing((int) padding); 
    } 

} 

Вот GridViewImageAdapter:

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 

import android.app.Activity; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 


    public class GridViewImageAdapter extends BaseAdapter { 

     private Activity _activity; 
     private ArrayList<String> _filePaths = new ArrayList<String>(); 
     private int imageWidth; 

     public GridViewImageAdapter(Activity activity, ArrayList<String> filePaths, 
            int imageWidth) { 
      this._activity = activity; 
      this._filePaths = filePaths; 
      this.imageWidth = imageWidth; 
     } 

     @Override 
     public int getCount() { 
      return this._filePaths.size(); 
     } 

     @Override 
     public Object getItem(int position) { 
      return this._filePaths.get(position); 
     } 

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

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      ImageView imageView; 
      if (convertView == null) { 
       imageView = new ImageView(_activity); 
      } else { 
       imageView = (ImageView) convertView; 
      } 

      // get screen dimensions 
      Bitmap image = decodeFile(_filePaths.get(position), imageWidth, 
        imageWidth); 

      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setLayoutParams(new GridView.LayoutParams(imageWidth, 
        imageWidth)); 
      imageView.setImageBitmap(image); 

      // image view click listener 
      imageView.setOnClickListener(new OnImageClickListener(position)); 

      return imageView; 
     } 

     class OnImageClickListener implements OnClickListener { 

      int _postion; 

      // constructor 
      public OnImageClickListener(int position) { 
       this._postion = position; 
      } 

      @Override 
      public void onClick(View v) { 
       // on selecting grid view image 
       // launch full screen activity 
       Intent i = new Intent(_activity, FullScreenViewActivity.class); 
       i.putExtra("position", _postion); 
       _activity.startActivity(i); 
      } 

     } 

     /* 
     * Resizing image size 
     */ 
     public static Bitmap decodeFile(String filePath, int WIDTH, int HIGHT) { 
      try { 

       File f = new File(filePath); 

       BitmapFactory.Options o = new BitmapFactory.Options(); 
       o.inJustDecodeBounds = true; 
       BitmapFactory.decodeStream(new FileInputStream(f), null, o); 

       final int REQUIRED_WIDTH = WIDTH; 
       final int REQUIRED_HIGHT = HIGHT; 
       int scale = 1; 
       while (o.outWidth/scale/2 >= REQUIRED_WIDTH 
         && o.outHeight/scale/2 >= REQUIRED_HIGHT) 
        scale *= 2; 

       BitmapFactory.Options o2 = new BitmapFactory.Options(); 
       o2.inSampleSize = scale; 
       return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

    } 

Я попробовал разные подошел я нашел здесь, на StackOverflow (один из них я реализовал его выше), но я до сих пор сталкиваются с проблемами. Любая помощь очень ценится.

Проблема здесь я считаю,

gridView.setAdapter (новый GridViewImageAdapter (getActivity()));

+0

, что вы имеете в виду, вы не можете назвать это, что это проблема и где? – tyczj

+0

@tyczj вопрос отредактировал и добавил более подробно – abedzantout

+0

, как вы можете видеть, нет конструктора, который просто принимает 'Activity', конструктор имеет 3 параметра – tyczj

ответ

3

конструктор, который можно определить взять там параметр:

public GridViewImageAdapter(Activity activity, ArrayList<String> filePaths,int imageWidth) 

и вы пытаетесь инициализировать объект адаптера с одним аргументом, который не является правильным.

getActivity() - это работа во фрагменте, но конструктор с одним аргументом (контекст) не найден в GridViewImageAdapter.

так изменить:

gridView.setAdapter(new GridViewImageAdapter(getActivity())); 

к:

gridView.setAdapter(new GridViewImageAdapter(getActivity() , imagePaths , columnWidth )); 

но вам необходимо инициализировать значения первого,

+0

Спасибо! Не заметил. – abedzantout

+0

добро пожаловать, рад помочь. –

Смежные вопросы