【发布时间】:2013-12-31 12:03:21
【问题描述】:
我想改变片段中活动的背景。
当我单击 Fragment 中的按钮时,它会选择图片。
并将图片设置为Activity的背景。
以下代码在Fragment中:
public class MjpegPlayerFragment extends Fragment {
private RelativeLayout relativeLayout;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d(TAG, "Fragment View Created") ;
View view = inflater.inflate(R.layout.preview_player, container, false) ;
relativeLayout = (RelativeLayout) getActivity().findViewById(R.id.splash);
ChangeBackground = (ImageButton) view.findViewById(R.id.ChangeBackground);
ChangeBackground.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Activity activity = getActivity();
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, 1);
}
});
}
@SuppressLint("NewApi")
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if(resultCode == Activity.RESULT_OK) {
Context context = getActivity();
Uri uri = data.getData();
ContentResolver cr = context.getContentResolver();
try {
Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));
BitmapDrawable background = new BitmapDrawable(bitmap);
relativeLayout.setBackground(background);
} catch (FileNotFoundException e) {
// TODO: handle exception
}
}
super.onActivityResult(requestCode, resultCode, data);
}
}
但它崩溃了,错误日志如下:
D/AndroidRuntime(29590): Shutting down VM
W/dalvikvm(29590): threadid=1: thread exiting with uncaught exception (group=0x416cc450)
--------- beginning of /dev/log/system
E/AndroidRuntime(29590): FATAL EXCEPTION: main
E/AndroidRuntime(29590): java.lang.RuntimeException: Failure delivering result ResultInfo{who=android:fragment:0, request=1, result=-1, data=Intent { dat=content://media/external/images/media/23878 }} to activity {tw.com.a_i_t.IPCamViewer/tw.com.a_i_t.IPCamViewer.MainActivity}: java.lang.NullPointerException
E/AndroidRuntime(29590): at android.app.ActivityThread.deliverResults(ActivityThread.java:3161)
E/AndroidRuntime(29590): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3204)
E/AndroidRuntime(29590): at android.app.ActivityThread.access$1100(ActivityThread.java:137)
E/AndroidRuntime(29590): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1254)
E/AndroidRuntime(29590): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(29590): at android.os.Looper.loop(Looper.java:213)
E/AndroidRuntime(29590): at android.app.ActivityThread.main(ActivityThread.java:4786)
E/AndroidRuntime(29590): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(29590): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(29590): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
E/AndroidRuntime(29590): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
E/AndroidRuntime(29590): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(29590): Caused by: java.lang.NullPointerException
E/AndroidRuntime(29590): at tw.com.a_i_t.IPCamViewer.Viewer.MjpegPlayerFragment.onActivityResult(MjpegPlayerFragment.java:1627)
E/AndroidRuntime(29590): at android.app.Activity.dispatchActivityResult(Activity.java:5196)
E/AndroidRuntime(29590): at android.app.ActivityThread.deliverResults(ActivityThread.java:3157)
E/AndroidRuntime(29590): ... 11 more
W/ActivityManager( 568): Force finishing activity tw.com.a_i_t.IPCamViewer/.MainActivity
W/ActivityManager( 568): Activity pause timeout for ActivityRecord{42260630 tw.com.a_i_t.IPCamViewer/.MainActivity}
而(MjpegPlayerFragment.java:1627) 是relativeLayout.setBackground(background);
有人可以教我如何解决这个问题吗? 预先感谢。
----------------------------------------------编辑------------------------------ 不好意思,上面说的不是很清楚。
我已经在onCreatView 中添加了relativeLayout,如下所示:
relativeLayout = (RelativeLayout) getActivity().findViewById(R.id.splash);
我的情况是:
Activity1 --> Activity1 --> 片段
splash是Activity1的RelativeLayout。
我想改变Fragment中Activity1的背景。
而Splash的XML如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/splash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/wifi_dvr" >
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/title"
android:src="@drawable/ic_launcher" />
<ImageView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="146dp"
android:src="@drawable/banner" />
</RelativeLayout>
我有两个活动。该片段由 activity2 调用,我想更改 activity1 的背景。
【问题讨论】:
-
relativeLayout未初始化 -
我已经定义了私有RelativeLayout relativeLayout;在代码的头部。
-
这只是一个声明而不是初始化
-
为什么不做RelativeLayout mainLayout;在片段的“父”活动中,然后在片段中执行 getActivity().getMainLayout.setBackgroundDrawable(...) 之类的操作
-
我已经编辑了内容。
标签: android android-fragments background bitmap android-activity