Как я могу передать изображение в метод во фрагменте?
В основном, когда я пытаюсь передать представление изображения или представление методу во фрагменте, результат равен нулю. Лучшее, что я мог до сих пор, было, как код ниже, по крайней мере, не падает. Я раздуваю два фрагмента. Что случилось?
Макет имеет два XML-файла:
fragment_image_slider.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black" />
...
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
<ImageView
android:id="@+id/sharethis"
android:clickable="true"
...
android:src="@drawable/ic_share" />
...
</RelativeLayout>
</RelativeLayout>
image_fullscreen_preview.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black">
...
<ImageView
android:id="@+id/image_preview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true"
android:scaleType="fitCenter" />
</RelativeLayout>
КОД ФРАГМЕНТА
private ImageView deleteThis, shareThis;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_image_slider, container, false);
shareThis = (ImageView) v.findViewById(R.id.sharethis);
...
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view =
layoutInflater.inflate(R.layout.image_fullscreen_preview, container, false);
final ImageView imageViewPreview = (ImageView) view.findViewById(R.id.image_preview);
Image image = images.get(position);
Glide
.with(getActivity())
.load(image.getPhotoUrl())
.thumbnail(0.5f)
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
progressBar.setVisibility(View.GONE);
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
progressBar.setVisibility(View.GONE);
return false;
}
})
.into(imageViewPreview);
shareThis.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onShareItem(imageViewPreview);
}
});
container.addView(view);
return view;
}
public void onShareItem(ImageView v) {
//ImageView ivImage = (ImageView) v.findViewById(R.id.image_preview); if I use `View v` as parameter the app crashes
Uri bmpUri = getLocalBitmapUri(v); // return null
...
}
Как передать эту переменную onShareItem
метод?
2 ответа
Вы не можете получить image_preview в onViewCreated, потому что он принадлежит Activity и еще не создан.
Переопределите onActivityCreated в Fragment, и там вы должны найти ImageView в Activity, представление, которое вы используете в onViewCreated, является вашим макетом фрагмента:
getActivity (). findViewById...
Не имея возможности увидеть код компоновки, я рекомендую использовать обратный вызов.
Реализуйте интерфейс в своем классе деятельности, где его метод - это логика, которую вы хотите выполнить, которая будет изменять или использовать ваш вид изображения. Затем, вместо того, чтобы передавать viewview вашему onShareItem, вы можете передать this и вызвать обратный вызов с любыми необходимыми параметрами.