- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在拼凑相当于 Android 中的 RSS 阅读器的东西,但我在使用 onClickListener 时遇到了问题。
下面的代码在 onClickListener 之外运行良好,但是一旦我将它移到类中,它就会运行
topNewsbtn = (Button) findViewById(R.id.newsTop);
topNewsbtn.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent itemintent = new Intent(that,RSSReader.class);
Bundle b = new Bundle();
b.putString("FeedURL", "http://english.aljazeera.net/Services/Rss/?PostingId=2007731105943979989");
itemintent.putExtra("android.intent.extra.INTENT", b);
startActivity(itemintent);
}
});
注意在 Activity 中定义为 Context 并在 onCreate 中指定为 that = this
在执行时,应用程序在启动时崩溃,并显示以下堆栈跟踪(LogCat 中没有任何内容)
Thread [<1> main] (Suspended (exception java.lang.RuntimeException))
<VM does not provide monitor information>
android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityRecord, android.content.Intent) line: 2663
android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityRecord, android.content.Intent) line: 2679
android.app.ActivityThread.access$2300(android.app.ActivityThread, android.app.ActivityThread$ActivityRecord, android.content.Intent) line: 125
android.app.ActivityThread$H.handleMessage(android.os.Message) line: 2033
android.app.ActivityThread$H(android.os.Handler).dispatchMessage(android.os.Message) line: 99
android.os.Looper.loop() line: 123
android.app.ActivityThread.main(java.lang.String[]) line: 4627
java.lang.reflect.Method.invokeNative(java.lang.Object, java.lang.Object[], java.lang.Class, java.lang.Class[], java.lang.Class, int, boolean) line: not available [native method]
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 521
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() line: 868
com.android.internal.os.ZygoteInit.main(java.lang.String[]) line: 626
dalvik.system.NativeStart.main(java.lang.String[]) line: not available [native method]
我有另一个 onClickListener,它也因相同类型的堆栈跟踪而崩溃,看起来像
watchLivebtn =(Button) findViewById(R.id.Live);
watchLivebtn.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
WebView browser = (WebView)findViewById(R.id.watchnowElement);
String HTML = "Just some HTML I want to display";
browser.loadData(HTML, "text/html", "UTF-8");
setContentView(R.layout.watchnow);
}
});
很明显我在 setOnClickListener 上做错了什么,但是什么?
谢谢。
更新
我拒绝把整个类(class)都放进去,因为它太长了,因为两个试图帮助我的人(谢谢)指出了我没有的东西我会把整个东西都贴出来帮助大家帮助我。
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.SlidingDrawer;
public class AJE extends Activity {
Button news_slideHandleButton;
SlidingDrawer news_slidingDrawer;
Button topNewsbtn;
Button watchLivebtn;
Context that;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
that = this;
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
news_slideHandleButton = (Button) findViewById(R.id.news_slideHandleButton);
news_slidingDrawer = (SlidingDrawer) findViewById(R.id.news_SlidingDrawer);
topNewsbtn = (Button) findViewById(R.id.newsTop);
topNewsbtn.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent itemintent = new Intent(that,RSSReader.class);
Bundle b = new Bundle();
b.putString("FeedURL", "http://english.aljazeera.net/Services/Rss/?PostingId=2007731105943979989");
itemintent.putExtra("android.intent.extra.INTENT", b);
startActivity(itemintent);
}
});
watchLivebtn =(Button) findViewById(R.id.Live);
watchLivebtn.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
WebView browser = (WebView)findViewById(R.id.watchnowElement);
String HTML = "<html><body><script src='http://admin.brightcove.com/js/BrightcoveExperiences.js' type='text/javascript'></script>" +
"<script src='/custom/brightcove/aje_bc.js' type='text/javascript'></script>"+
"<div style='text-align: left; padding-bottom: 20px;'>" +
"<div id='BCplayerArea' style='width: 680px; height: 420px;'><object class='BrightcoveExperience' id='myExperience747084146001' data='http://c.brightcove.com/services/viewer/federated_f9?&width=680&height=440&flashID=myExperience747084146001&bgcolor=%23FFFFFF&playerID=751182905001&playerKey=AQ~~%2CAAAAmtVJIFk~%2CTVGOQ5ZTwJYW4Aj2VxnKEXntSbmcf9ZQ&isVid=true&isUI=true&dynamicStreaming=true&%40videoPlayer=747084146001&autoStart=' type='application/x-shockwave-flash' width='680' height='440'><param value='always' name='allowScriptAccess'><param value='true' name='allowFullScreen'><param value='false' name='seamlessTabbing'><param value='true' name='swliveconnect'><param value='window' name='wmode'><param value='high' name='quality'><param value='#FFFFFF' name='bgcolor'></object></div>"+
"<script type='text/javascript'>// <![CDATA["+
"RenderScVideo('747084146001','751182905001',680,440,'BCplayerArea');"+
"brightcove.createExperiences(); // ]]></script></body></html>';";
browser.loadData(HTML, "text/html", "UTF-8");
setContentView(R.layout.watchnow);
}
});
setContentView(R.layout.start);
}
}
最佳答案
在内部类中,this
会为您提供对当前所在类的引用,而不是对 Activity 的引用。
在 Activity
的 onCreate()
方法中初始化一个 Context
对象,以便在内部类中使用它。
还有另一种不被鼓励的可能性。我只是向您展示可能性并重复我自己,不鼓励使用此方法,因为您可能会泄漏整个 Activity,具体取决于您将该上下文传递给的代码。
您可以获得这样的 Activity MyActivity.this
。它会起作用,但只要您不是 100% 确定您不会泄漏它,就不要那样做。
更新
您的问题实际上是另外一回事。您在访问后设置布局,这是行不通的。因此,您必须使用 setContentView()
设置布局,最好是在向上调用 super 之后直接使用。
主要问题是您正在尝试访问根本不存在的 View ,这当然会导致应用程序崩溃。
关于android - 关于 OnClickListener,我忘记了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4912853/
我最近在/ drawable中添加了一些.gifs,以便可以将它们与按钮一起使用。这个工作正常(没有错误)。现在,当我重建/运行我的应用程序时,出现以下错误: Error: Gradle: Execu
Android 中有返回内部存储数据路径的方法吗? 我有 2 部 Android 智能手机(Samsung s2 和 s7 edge),我在其中安装了一个应用程序。我想使用位于这条路径中的 sqlit
这个问题在这里已经有了答案: What's the difference between "?android:" and "@android:" in an android layout xml f
我只想知道 android 开发手机、android 普通手机和 android root 手机之间的实际区别。 我们不能从实体店或除 android marketplace 以外的其他地方购买开发手
自Gradle更新以来,我正在努力使这个项目达到标准。这是一个团队项目,它使用的是android-apt插件。我已经进行了必要的语法更改(编译->实现和apt->注释处理器),但是编译器仍在告诉我存在
我是android和kotlin的新手,所以请原谅要解决的一个非常简单的问题! 我已经使用导航体系结构组件创建了一个基本应用程序,使用了底部的导航栏和三个导航选项。每个导航选项都指向一个专用片段,该片
我目前正在使用 Facebook official SDK for Android . 我现在正在使用高级示例应用程序,但我不知道如何让它获取应用程序墙/流/状态而不是登录的用户。 这可能吗?在那种情
我在下载文件时遇到问题, 我可以在模拟器中下载文件,但无法在手机上使用。我已经定义了上网和写入 SD 卡的权限。 我在服务器上有一个 doc 文件,如果用户单击下载。它下载文件。这在模拟器中工作正常但
这个问题在这里已经有了答案: What is the difference between gravity and layout_gravity in Android? (22 个答案) 关闭 9
任何人都可以告诉我什么是 android 缓存和应用程序缓存,因为当我们谈论缓存清理应用程序时,它的作用是,缓存清理概念是清理应用程序缓存还是像内存管理一样主存储、RAM、缓存是不同的并且据我所知,缓
假设应用程序 Foo 和 Eggs 在同一台 Android 设备上。任一应用程序都可以获取设备上所有应用程序的列表。一个应用程序是否有可能知道另一个应用程序是否已经运行以及运行了多长时间? 最佳答案
我有点困惑,我只看到了从 android 到 pc 或者从 android 到 pc 的例子。我需要制作一个从两部手机 (android) 连接的 android 应用程序进行视频聊天。我在想,我知道
用于使用 Android 以编程方式锁定屏幕。我从 Stackoverflow 之前关于此的问题中得到了一些好主意,并且我做得很好,但是当我运行该代码时,没有异常和错误。而且,屏幕没有锁定。请在这段代
文档说: android:layout_alignParentStart If true, makes the start edge of this view match the start edge
我不知道这两个属性和高度之间的区别。 以一个TextView为例,如果我将它的layout_width设置为wrap_content,并将它的width设置为50 dip,会发生什么情况? 最佳答案
这两个属性有什么关系?如果我有 android:noHistory="true",那么有 android:finishOnTaskLaunch="true" 有什么意义吗? 最佳答案 假设您的应用中有
我是新手,正在尝试理解以下 XML 代码: 查看 developer.android.com 上的文档,它说“starStyle”是 R.attr 中的常量, public static final
在下面的代码中,为什么当我设置时单选按钮的外观会发生变化 android:layout_width="fill_parent" 和 android:width="fill_parent" 我说的是
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
假设我有一个函数 fun myFunction(name:String, email:String){},当我调用这个函数时 myFunction('Ali', 'ali@test.com ') 如何
我是一名优秀的程序员,十分优秀!