在Fragment中使用Imageview

时间:2016-07-20 06:34:44

标签: android android-fragments android-imageview

我正在尝试在片段中设置imageview:

ImageView imageView = (ImageView) getActivity().findViewById(R.id.qrCode);

    try {
        Bitmap bitmap = encodeAsBitmap(STR);
        imageView.setImageBitmap(bitmap);
    } catch (WriterException e) {
        e.printStackTrace();
    }

但是我收到了错误

  

“尝试调用虚方法”无效   android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)'上一个   null对象引用“。

如果我在一个扩展AppCompatActivity但不在我的片段类中的类中使用它,那么这是有效的。

相应的xml文件是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">


<!--   tools:context="${relativePackage}.${activityClass}" > -->

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:gravity="center"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/welcome"
            android:textSize="20dp" />

        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:textColor="@color/lbl_name"
            android:textSize="24dp" />

        <TextView
            android:id="@+id/email"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="13dp" />

        <Button
            android:id="@+id/btnLogout"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="40dip"
            android:background="@color/btn_logut_bg"
            android:text="@string/btn_logout"
            android:textAllCaps="false"
            android:textColor="@color/white"
            android:textSize="15dp" />

        <ImageView
            android:id="@+id/qrCode"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true" />

    </LinearLayout>



</RelativeLayout>

6 个答案:

答案 0 :(得分:0)

而不是getActivity()使用getView()

喜欢这个

ImageView imageView = (ImageView) getView().findViewById(R.id.qrCode);
片段内的

getActivity()将活动对象返回到您的片段所附加的对象,而getView()将返回您的片段的根视图,其中所有其他视图都存在,然后您可以通过其ID找到它们。

答案 1 :(得分:0)

在活动类中将其设为public static,并在片段中使用它,如下所示:

在你的活动中;

i=j;

在你的片段中,

 public static ImageView imageView;

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.YOURLAYOUT);


 imageView = (ImageView) getActivity().findViewById(R.id.qrCode);

}

答案 2 :(得分:0)

应该是这样的。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.your_layout, container,
            false);

    ImageView imageView = (ImageView) rootView.findViewById(R.id.qrCode);

    return rootView;
}

答案 3 :(得分:0)

我认为你做错了

ImageView imageView = (ImageView) getActivity().findViewById(R.id.qrCode);

这不是你在片段类中所做的。在片段中有一个View(inflator.inflate),它通过该视图为布局n充气,你可以访问所有的id。所以你应该尝试这样的事情:

ImagView imageView = (ImageView) view.findViewById(R.id.qrCode);

答案 4 :(得分:0)

将片段视图存储在类变量中。

private View myFragmentView;

在oncreateView

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        myFragmentView = inflater.inflate(R.layout.signup_addressinfo_layout, container, false);

    return myFragmentView;
}

在你的功能中

 ImageView imageView = (ImageView) myFragmentView.findViewById(R.id.qrCode);

答案 5 :(得分:0)

你做的方式是错的,你总是得到空对象引用错误,就像片段一样,视图绑定发生在onCreateView()

你需要这样做:

public class MyFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

         // here replace fragment_layout with your xml layout that you have created
         View v = inflater.inflate(R.layout.fragment_layout, container, false);
         ImageView ivQrCode =(ImageView) v.findViewById(R.id.qrCode);

         try {
            Bitmap bitmap = encodeAsBitmap(STR);
            ivQrCode.setImageBitmap(bitmap);
         } catch (WriterException e) {
            e.printStackTrace();
         }

         return v;
    }
}