我正在尝试在片段中设置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>
答案 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;
}
}