【问题标题】:ImageViews and Intents图像视图和意图
【发布时间】:2023-04-03 21:19:01
【问题描述】:

所以我试图在单击图像时启动一个新活动,该活动将启动一个新活动,该图像处于全屏状态。为此,我编写了以下代码:

在 XML 文件中定义的 ImageView:

<ImageView
     android:id="@+id/sun"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_below="@+id/sun_title"
     android:layout_centerHorizontal="true"
     android:contentDescription="@string/sun_image"
     android:src="@drawable/sun" />

这是我在点击图片时使用 onClickListener 来处理意图的地方:

ImageView imageView;
//begin onViewCreated Method
     ...

     final Context classContext = null;
     imageView = (ImageView) getView().findViewById(R.id.sun);

     imageView.setOnClickListener(new View.OnClickListener() {

          @Override
          public void onClick(View v) {
               Intent i = new Intent(classContext, Settings.class);
               startActivity(i);                
          }
     });

     ...
//end onViewCreated Method

以下代码没有错误,但是当我运行应用程序并点击图像时,应用程序崩溃并出现 nullPointerException。这里是 logcat:

02-25 16:55:43.201: E/AndroidRuntime(3459): FATAL EXCEPTION: main
02-25 16:55:43.201: E/AndroidRuntime(3459): Process: com.andrewq.planets, PID: 3459
02-25 16:55:43.201: E/AndroidRuntime(3459): java.lang.NullPointerException
02-25 16:55:43.201: E/AndroidRuntime(3459):     at android.content.ComponentName.<init>(ComponentName.java:77)
02-25 16:55:43.201: E/AndroidRuntime(3459):     at android.content.Intent.<init>(Intent.java:3821)
02-25 16:55:43.201: E/AndroidRuntime(3459):     at com.andrewq.planets.FragmentA$2.onClick(FragmentA.java:43)
02-25 16:55:43.201: E/AndroidRuntime(3459):     at android.view.View.performClick(View.java:4438)
02-25 16:55:43.201: E/AndroidRuntime(3459):     at android.view.View$PerformClick.run(View.java:18422)
02-25 16:55:43.201: E/AndroidRuntime(3459):     at android.os.Handler.handleCallback(Handler.java:733)
02-25 16:55:43.201: E/AndroidRuntime(3459):     at android.os.Handler.dispatchMessage(Handler.java:95)
02-25 16:55:43.201: E/AndroidRuntime(3459):     at android.os.Looper.loop(Looper.java:136)
02-25 16:55:43.201: E/AndroidRuntime(3459):     at android.app.ActivityThread.main(ActivityThread.java:5017)
02-25 16:55:43.201: E/AndroidRuntime(3459):     at java.lang.reflect.Method.invokeNative(Native Method)
02-25 16:55:43.201: E/AndroidRuntime(3459):     at java.lang.reflect.Method.invoke(Method.java:515)
02-25 16:55:43.201: E/AndroidRuntime(3459):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-25 16:55:43.201: E/AndroidRuntime(3459):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-25 16:55:43.201: E/AndroidRuntime(3459):     at dalvik.system.NativeStart.main(Native Method)

希望这是足够的信息来回答。

提前致谢:)

编辑:我还没有为图像创建其他活动,因此出于测试目的,我让它打开了我的偏好活动。

【问题讨论】:

  • 如果你尝试这个... Intent i = new Intent(actuallClass.this, Settings.class);
  • @geekCode - 这给了我一个错误。它说actualClass不能被解析为一个类型。
  • 只需将 actualClass 替换为您的班级名称,第二个参数必须是下一个班级......并且在 startActivity(i);添加这个... ActualClass.this.startActivity(i);再次将actualClass替换为您的班级名称
  • @geekCode 现在它说:构造函数 Intent(FragmentA, Class) 以 Eclipse 错误的形式未定义。
  • 你添加了 ActualClass.this.startActivity(i);行到你的代码...???

标签: java android eclipse listview android-intent


【解决方案1】:

你有

final Context classContext = null;

所以classContextnull。既然您看起来像是在Fragment 中,请尝试

Intent i = new Intent(getActivity(), Settings.class);

【讨论】:

  • 更好的 startActivity(new Intent(getActivity(),Settings.class)); 1行中的所有内容:-)
  • @LuisAlberto 是的,这也应该有效。但我不确定它是否“更好”。我喜欢将它们分开,以防需要添加Extras(等...),而且我更喜欢可读性。但这只是偏好。
  • 是的,但是 1 行中的所有内容都使代码看起来干净,如果你想设置参数或设置意图的某些属性,那么你是对的,它不可能像我那样做。跨度>
  • @LuisAlberto 它确实将所有内容集中在一行中。这就是为什么我说这是开发者偏好。我喜欢将它们分开,但我同意它会起作用,而且只是另一种方式。
【解决方案2】:

您的classContextnull。如果此代码在 Activity 中,则创建 Intent 之类的

Intent i = new Intent(this, Settings.class);

如果它来自其他类,请确保将有效的 Context 传递给该类并在代码中使用它而不是 classContext

【讨论】:

  • 感谢您的回答...我选择了 codeMagic 的最佳答案,因为他在编辑您的答案之前很容易理解。但你们俩都是对的。
猜你喜欢
  • 2018-06-07
  • 1970-01-01
  • 2019-06-21
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多