Android 片段中的OnClickListener使应用程序停止

Android 片段中的OnClickListener使应用程序停止,android,android-intent,android-fragments,onclick,onclicklistener,Android,Android Intent,Android Fragments,Onclick,Onclicklistener,我在Java文件的TableRow中使用OnClick,我使用OnClickListener,但当我运行应用程序并尝试对其进行分段时,应用程序停止 我想通过单击打开到新活动的片段中的TableRow来实现这一点 这是Java代码文件: package com.hello.turidf; import com.hello.turidf.R; import android.content.Intent; import android.os.Bundle; import android.suppo

我在Java文件的TableRow中使用OnClick,我使用OnClickListener,但当我运行应用程序并尝试对其进行分段时,应用程序停止

我想通过单击打开到新活动的片段中的TableRow来实现这一点

这是Java代码文件:

package com.hello.turidf;

import com.hello.turidf.R;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

public class TabsIndexM001Help extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.m_001_help, container, false);

    Button openmap = (Button)rootView.findViewById(R.id.view_map);
    openmap.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View rootView) {
            Intent intent = new Intent(getActivity(), M001MapActivity.class);
            startActivity(intent);
        }
    });

    return rootView;
}

}
这是XML代码文件(片段):


........
这是logcat:

12-22 18:53:38.862: E/dalvikvm-heap(2783): ooh, a big allocation 3240000.
12-22 18:53:42.926: W/dalvikvm(2783): VFY: unable to resolve direct method 11264: Landroid/widget/LinearLayout$LayoutParams;.<init> (Landroid/widget/LinearLayout$LayoutParams;)V
12-22 18:53:58.421: W/dalvikvm(2783): threadid=1: thread exiting with uncaught exception (group=0x40015560)
12-22 18:53:58.451: E/AndroidRuntime(2783): FATAL EXCEPTION: main
12-22 18:53:58.451: E/AndroidRuntime(2783): java.lang.ClassCastException: android.widget.ImageView
12-22 18:53:58.451: E/AndroidRuntime(2783):     at com.hello.turidf.TabsIndexM001Help.onCreateView(TabsIndexM001Help.java:21)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at     android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:486)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.support.v4.view.ViewPager.populate(ViewPager.java:1073)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.support.v4.view.ViewPager.populate(ViewPager.java:919)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.support.v4.view.ViewPager$3.run(ViewPager.java:249)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.support.v4.view.ViewPager.completeScroll(ViewPager.java:1766)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.support.v4.view.ViewPager.onInterceptTouchEvent(ViewPager.java:1901)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:848)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:872)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:872)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:872)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:872)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1695)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1125)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.app.Activity.dispatchTouchEvent(Activity.java:2096)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1679)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2196)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1880)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.os.Looper.loop(Looper.java:130)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at android.app.ActivityThread.main(ActivityThread.java:3717)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at java.lang.reflect.Method.invokeNative(Native Method)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at java.lang.reflect.Method.invoke(Method.java:507)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
12-22 18:53:58.451: E/AndroidRuntime(2783):     at dalvik.system.NativeStart.main(Native Method)
12-22 18:54:13.876: W/dalvikvm(2985): VFY: unable to resolve direct method 11264: Landroid/widget/LinearLayout$LayoutParams;.<init> (Landroid/widget/LinearLayout$LayoutParams;)V
12-22 18:53:38.862:E/dalvikvm堆(2783):噢,一个大的分配3240000。
12-22 18:53:42.926:W/dalvikvm(2783):VFY:无法解析直接方法11264:Landroid/widget/LinearLayout$LayoutParams;。(Landroid/widget/LinearLayout$LayoutParams;)V
12-22 18:53:58.421:W/dalvikvm(2783):threadid=1:线程以未捕获异常退出(组=0x40015560)
12-22 18:53:58.451:E/AndroidRuntime(2783):致命异常:main
12-22 18:53:58.451:E/AndroidRuntime(2783):java.lang.ClassCastException:android.widget.ImageView
12-22 18:53:58.451:E/AndroidRuntime(2783):在com.hello.turidf.TabsIndexM001Help.onCreateView(TabsIndexM001Help.java:21)
12-22 18:53:58.451:E/AndroidRuntime(2783):位于android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:486)
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.support.v4.view.ViewPager.populate(ViewPager.java:1073)
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.support.v4.view.ViewPager.populate(ViewPager.java:919)
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.support.v4.view.ViewPager$3.run(ViewPager.java:249)
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.support.v4.view.ViewPager.completeScroll(ViewPager.java:1766)
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.support.v4.view.ViewPager.onInterceptTouchEvent(ViewPager.java:1901)
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:848)上
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:872)上
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:872)上
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:872)上
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:872)上
12-22 18:53:58.451:E/AndroidRuntime(2783):在com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1695)
12-22 18:53:58.451:E/AndroidRuntime(2783):在com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1125)
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.app.Activity.dispatchTouchEvent(Activity.java:2096)上
12-22 18:53:58.451:E/AndroidRuntime(2783):在com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1679)
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2196)
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.view.ViewRoot.handleMessage(ViewRoot.java:1880)
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.os.Handler.dispatchMessage(Handler.java:99)上
12-22 18:53:58.451:E/AndroidRuntime(2783):在android.os.Looper.loop(Looper.java:130)
12-22 18:53:58.451:E/AndroidRuntime(2783):位于android.app.ActivityThread.main(ActivityThread.java:3717)
12-22 18:53:58.451:E/AndroidRuntime(2783):位于java.lang.reflect.Method.Invokenactive(本机方法)
12-22 18:53:58.451:E/AndroidRuntime(2783):位于java.lang.reflect.Method.invoke(Method.java:507)
12-22 18:53:58.451:E/AndroidRuntime(2783):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
12-22 18:53:58.451:E/AndroidRuntime(2783):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
12-22 18:53:58.451:E/AndroidRuntime(2783):在dalvik.system.NativeStart.main(本机方法)
12-22 18:54:13.876:W/dalvikvm(2985):VFY:无法解析直接方法11264:Landroid/widget/LinearLayout$LayoutParams;。(Landroid/widget/LinearLayout$LayoutParams;)V

您正试图将
图像视图
转换为
按钮

Button openmap = (Button)rootView.findViewById(R.id.view_map);
把这条线换成

ImageView openMap = (ImageView) rootView.findViewById(R.id.view_map);

然后重试。

如果在java代码中使用SetOnClickListener,首先不要在xml文件中保留“onClick”属性。在您的例子中,在java代码中调用名为“open_m001_map”的函数就足够了

所以你有两个选择。 1.在xml代码中指定“onClick”属性,并按如下所示为其创建一个函数

<TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/tableRowOne"
        android:onClick="open_m001_map">
.....
</TableRow>
  • 第二种方法是从xml文件中删除“onClick”,并执行以下操作 在xml文件中

    <TableRow
      android:layout_width="match_parent"
      adroid:layout_height="match_parent"
      android:id="@+id/tableRowOne"
      android:onClick="">
    

    “secondActivity”是您要打开的活动的名称。

    当您提供整个文件的百分之几(及其重要部分)时,此布局xml文件不会告诉我们太多信息。我犯了一个错误。在第一种方法中,您必须将函数添加到MainActivity java代码中,它应该是这样的:public void rowtowclick(View View){Intent i=new Intent(this,secondActivity.class);startActivity(i);
    public void open_m001_map(){
        Intent i=new Intent(getActivity(),secondActivity.class);
        startActivity(i);
    }
    
    <TableRow
      android:layout_width="match_parent"
      adroid:layout_height="match_parent"
      android:id="@+id/tableRowOne"
      android:onClick="">
    
    TableRow tableRowOne=(TableRow)view.findViewById(R.id.tableRowOne);
    
    tableRowOne.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent i=new Intent(getActivity(),secondActivity.class);
            startActivity(i);
        }
    });