我希望点击片段和活动中的按钮。目标活动“GoogleMaps.class”已经在我的清单中,并且已经在另一个Activity中的onClick中使用,因此这不是问题所在。我试过以下代码;
private void onClick_nci()
{
Intent intent = new Intent(getActivity(), GoogleMaps.class);
startActivity(intent);
}
我也尝试过StackOverflow上的每个答案,但没有找到解决方案,请你知道,谢谢。
MyFragmentB。
package com.test.finalproject;
import android.content.Intent;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
public class MyFragmentB extends Fragment implements OnInitListener, OnClickListener{
private TextToSpeech tts;
private Button btnSpeak;
private TextView txtText;
Button nci;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View myFragmentView = inflater.inflate(R.layout.fragment_b, container, false);
nci = (Button) myFragmentView.findViewById(R.id.nci);
tts = new TextToSpeech(getActivity(), this);
btnSpeak = (Button) myFragmentView.findViewById(R.id.btnSpeak);
txtText = (TextView) myFragmentView.findViewById(R.id.txtText);
// button on click event
btnSpeak.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
speakOut();
}
});
return myFragmentView;
}
@Override
public void onDestroy() {
// Don't forget to shutdown!
if (tts != null) {
tts.stop();
tts.shutdown();
}
super.onDestroy();
}
private void onClick_nci(View v)
{
Intent intent = new Intent(getActivity(), GoogleMaps.class);
startActivity(intent);
}
private void speakOut() {
String text = txtText.getText().toString();
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
@Override
public void onInit(int status) {
// TODO Auto-generated method stub
}
}
logcat的。
12-09 17:18:42.046:I / Choreographer(11466):跳过43帧!应用程序可能在其主线程上做了太多工作。 12-09 17:18:45.246:D / AndroidRuntime(11466):关闭VM 12-09 17:18:45.246:W / dalvikvm(11466):threadid = 1:线程退出,未捕获异常(group = 0x41c64da0) 12-09 17:18:45.256:E / AndroidRuntime(11466):致命异常:主要 12-09 17:18:45.256:E / AndroidRuntime(11466):进程:com.test.finalproject,PID:11466 12-09 17:18:45.256:E / AndroidRuntime(11466):java.lang.IllegalStateException:无法在视图类android上的onClick处理程序的活动类com.test.finalproject.Tabs中找到onClick_nci(View)方法。 widget.Button,id为'nci' 12-09 17:18:45.256:E / AndroidRuntime(11466):在android.view.View $ 1.onClick(View.java:3956) 12-09 17:18:45.256:E / AndroidRuntime(11466):在android.view.View.performClick(View.java:4637) 12-09 17:18:45.256:E / AndroidRuntime(11466):在android.view.View $ PerformClick.run(View.java:19422) 12-09 17:18:45.256:E / AndroidRuntime(11466):在android.os.Handler.handleCallback(Handler.java:733) 12-09 17:18:45.256:E / AndroidRuntime(11466):在android.os.Handler.dispatchMessage(Handler.java:95) 12-09 17:18:45.256:E / AndroidRuntime(11466):在android.os.Looper.loop(Looper.java:136) 12-09 17:18:45.256:E / AndroidRuntime(11466):在android.app.ActivityThread.main(ActivityThread.java:5586) 12-09 17:18:45.256:E / AndroidRuntime(11466):at java.lang.reflect.Method.invokeNative(Native Method) 12-09 17:18:45.256:E / AndroidRuntime(11466):at java.lang.reflect.Method.invoke(Method.java:515) 12-09 17:18:45.256:E / AndroidRuntime(11466):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1268) 12-09 17:18:45.256:E / AndroidRuntime(11466):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 12-09 17:18:45.256:E / AndroidRuntime(11466):at dalvik.system.NativeStart.main(Native Method) 12-09 17:18:45.256:E / AndroidRuntime(11466):引起:java.lang.NoSuchMethodException:onClick_nci [class android.view.View] 12-09 17:18:45.256:E / AndroidRuntime(11466):at java.lang.Class.getConstructorOrMethod(Class.java:472) 12-09 17:18:45.256:E / AndroidRuntime(11466):at java.lang.Class.getMethod(Class.java:857) 12-09 17:18:45.256:E / AndroidRuntime(11466):在android.view.View $ 1.onClick(View.java:3949) 12-09 17:18:45.256:E / AndroidRuntime(11466):... 11 more
答案 0 :(得分:2)
你确定,你的代码被调用了吗?
尝试使用父Activity上下文启动您的意图:
getActivity().startActivity(intent)
答案 1 :(得分:1)
startActivity
方法适用于Activity
类。那么你应该有一个Activity
对象来调用该函数。在Activity
中,您可以使用startActivity
因为this
引用了Activity
个对象,但在Fragment
类中,this
引用Fragment
}对象,StartActivity
类中没有方法Fragment
。您应该使用Activity
对象或使用interface
在Fragment
和Activity
之间进行通信。
这是一个例子:
private void onClick_nci()
{
Intent intent = new Intent(yourFragmentClass.this.getActivity(), GoogleMaps.class);
yourFragmentClass.this.getActivity().startActivity(intent);
}
答案 2 :(得分:0)
如果你想从片段开始新的Activity,那么你需要活动对象/引用(getActivity())来创建Intent&调用StartActivity()方法。
Intent intent = new Intent(getActivity(), GoogleMaps.class);
getActivity().startActivity(intent);
答案 3 :(得分:0)
确保按钮在xml中具有onClick属性。
<Button android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:onClick="onClick_nci" />