gpt4 book ai didi

android - 关于 OnClickListener,我忘记了什么?

转载 作者:搜寻专家 更新时间:2023-11-01 09:15:39 25 4
gpt4 key购买 nike

我正在拼凑相当于 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?&amp;width=680&amp;height=440&amp;flashID=myExperience747084146001&amp;bgcolor=%23FFFFFF&amp;playerID=751182905001&amp;playerKey=AQ~~%2CAAAAmtVJIFk~%2CTVGOQ5ZTwJYW4Aj2VxnKEXntSbmcf9ZQ&amp;isVid=true&amp;isUI=true&amp;dynamicStreaming=true&amp;%40videoPlayer=747084146001&amp;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 的引用。

ActivityonCreate() 方法中初始化一个 Context 对象,以便在内部类中使用它。

还有另一种不被鼓励的可能性。我只是向您展示可能性并重复我自己,不鼓励使用此方法,因为您可能会泄漏整个 Activity,具体取决于您将该上下文传递给的代码。

您可以获得这样的 Activity MyActivity.this。它会起作用,但只要您不是 100% 确定您不会泄漏它,就不要那样做。


更新

您的问题实际上是另外一回事。您在访问后设置布局,这是行不通的。因此,您必须使用 setContentView() 设置布局,最好是在向上调用 super 之后直接使用。

主要问题是您正在尝试访问根本不存在的 View ,这当然会导致应用程序崩溃。

关于android - 关于 OnClickListener,我忘记了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4912853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com