在片段中使用 Imageview
Using Imageview in Fragment
我正在尝试在片段中设置图像视图:
ImageView imageView = (ImageView) getActivity().findViewById(R.id.qrCode);
try {
Bitmap bitmap = encodeAsBitmap(STR);
imageView.setImageBitmap(bitmap);
} catch (WriterException e) {
e.printStackTrace();
}
但是我收到错误
"Attempt to invoke virtual method 'void
android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)' on a
null object reference".
如果我将它放在扩展 AppCompatActivity 但不在我的片段 class 中的 class 中,则此方法有效。
对应的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>
而不是 getActivity()
使用 getView()
像这样
ImageView imageView = (ImageView) getView().findViewById(R.id.qrCode);
在你的片段中
getActivity() returns activity 您的片段所附加的对象,而 getView()
将 return 您片段的根视图,其中所有其他存在视图,然后您可以通过它们的 ID 找到它们。
在您的 activity class 中将其设为 public 静态并在您的片段中使用它,如下所示:
在你的 activity;
public static ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.YOURLAYOUT);
imageView = (ImageView) getActivity().findViewById(R.id.qrCode);
}
在你的片段中,
try {
Bitmap bitmap = encodeAsBitmap(STR);
YOURACITVITYNAME.imageView.setImageBitmap(bitmap);
} catch (WriterException e) {
e.printStackTrace();
}
应该是这样的
@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;
}
我认为你做错了
ImageView imageView = (ImageView) getActivity().findViewById(R.id.qrCode);
这不是你在 fragment class.In fragment 中的做法,有一个 View(inflator.inflate) 可以通过该视图扩展布局 n 你可以访问所有的 id。所以你应该尝试这样的事情:
ImagView imageView = (ImageView) view.findViewById(R.id.qrCode);
在 class 变量中存储片段视图。
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);
你做的方式是错误的,你总是得到空对象引用错误,因为在片段的情况下,视图绑定发生在 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;
}
}
我正在尝试在片段中设置图像视图:
ImageView imageView = (ImageView) getActivity().findViewById(R.id.qrCode);
try {
Bitmap bitmap = encodeAsBitmap(STR);
imageView.setImageBitmap(bitmap);
} catch (WriterException e) {
e.printStackTrace();
}
但是我收到错误
"Attempt to invoke virtual method 'void android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)' on a null object reference".
如果我将它放在扩展 AppCompatActivity 但不在我的片段 class 中的 class 中,则此方法有效。
对应的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>
而不是 getActivity()
使用 getView()
像这样
ImageView imageView = (ImageView) getView().findViewById(R.id.qrCode);
在你的片段中
getActivity() returns activity 您的片段所附加的对象,而 getView()
将 return 您片段的根视图,其中所有其他存在视图,然后您可以通过它们的 ID 找到它们。
在您的 activity class 中将其设为 public 静态并在您的片段中使用它,如下所示:
在你的 activity;
public static ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.YOURLAYOUT);
imageView = (ImageView) getActivity().findViewById(R.id.qrCode);
}
在你的片段中,
try {
Bitmap bitmap = encodeAsBitmap(STR);
YOURACITVITYNAME.imageView.setImageBitmap(bitmap);
} catch (WriterException e) {
e.printStackTrace();
}
应该是这样的
@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;
}
我认为你做错了
ImageView imageView = (ImageView) getActivity().findViewById(R.id.qrCode);
这不是你在 fragment class.In fragment 中的做法,有一个 View(inflator.inflate) 可以通过该视图扩展布局 n 你可以访问所有的 id。所以你应该尝试这样的事情:
ImagView imageView = (ImageView) view.findViewById(R.id.qrCode);
在 class 变量中存储片段视图。
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);
你做的方式是错误的,你总是得到空对象引用错误,因为在片段的情况下,视图绑定发生在 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;
}
}