从片段内的Button开始一个Activity

时间:2014-12-09 16:55:10

标签: java android fragment

我希望点击片段和活动中的按钮。目标活动“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

4 个答案:

答案 0 :(得分:2)

你确定,你的代码被调用了吗?

尝试使用父Activity上下文启动您的意图:

getActivity().startActivity(intent)

答案 1 :(得分:1)

startActivity方法适用于Activity类。那么你应该有一个Activity对象来调用该函数。在Activity中,您可以使用startActivity因为this引用了Activity个对象,但在Fragment类中,this引用Fragment }对象,StartActivity类中没有方法Fragment。您应该使用Activity对象或使用interfaceFragmentActivity之间进行通信。

这是一个例子:

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" />