2017-08-04 93 views
0

基本上,當我嘗試將imageview或視圖傳遞給片段中的方法時,結果爲空。到目前爲止,我能做的最好的代碼至少不會崩潰。我正在誇大兩個片段。哪裏不對?如何將imageview傳遞給片段中的方法?

佈局有兩個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> 

片段CODE

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方法?

+0

我們需要要查看佈局代碼,最初的建議是使用onViewCreated來查找視圖而不是onCreateView。 OnViewCreated有已經充實的視圖作爲參數,oberwrite按ctrl + o – cutiko

回答

0

不能看到佈局代碼,我建議你可以使用回調。

在你的活動類中實現一個接口,其中它的方法是你想要執行的將要修改或使用圖像視圖的邏輯。然後,而不是將imageview傳遞給你的onShareItem,你可以通過'this'並用你需要的任何參數調用回調。

+0

你能給我一個示例代碼嗎? – afazolo

1

您不能在onViewCreated中創建image_preview,因爲它屬於Activity並且尚未創建。

覆蓋在片段onActivityCreated有你有找到活動中的ImageView的,您使用的是onViewCreated的看法是你的片段佈局:

getActivity()findViewById ...

+0

你的意思是和這裏一樣嗎? https://stackoverflow.com/a/24417087/751630 – afazolo

+0

關閉,你不能在片段中使用findViewById()directlt,你必須通過首先訪問視圖並在視圖中找到你需要的。 Insise onActivityCreated使用getActivity()。findViewById(); – cutiko

相關問題