简体   繁体   English

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

[英]OnClickListener within a fragment makes the application stops

I'm using OnClick inside a TableRow in the Java file I'm using OnClickListener but when I run the application and try to get to fragment the application stops. 我在Java文件的TableRow内使用OnClick,但在使用OnClickListener时,却在运行应用程序并尝试对应用程序进行分段时停止。

I want to do that by clicking the TableRow which is within the fragment open to a new activity. 我想通过单击打开到新活动的片段内的TableRow来做到这一点。

This is the Java code file: 这是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;
}

}

This is the XML code file (fragment): 这是XML代码文件(片段):

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
.......>

    <TableLayout
    .......>

        <TabelRow
        android:onClick="open_m001_map"
        ....>
            ........
        </TableRow>

    </TableLayout>
</ScrollBiew>

This is the logcat: 这是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

You are trying to cast ImageView to Button . 您正在尝试将ImageViewButton

Button openmap = (Button)rootView.findViewById(R.id.view_map);

Shange this line with 香格此行

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

and try again. 然后再试一次。

First of all don't keep 'onClick' attribute in xml file if you use SetOnClickListener in java code. 首先,如果您在Java代码中使用SetOnClickListener,请不要在xml文件中保留“ onClick”属性。 In you case,it's enough to call a function named "open_m001_map" in you java code. 在这种情况下,只需在Java代码中调用一个名为“ open_m001_map”的函数即可。

So you have two options. 因此,您有两个选择。 1. Give 'onClick' attribute in xml code and create a function for it as follows. 1.在xml代码中提供“ onClick”属性,并为其创建函数,如下所示。

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

Inside java code of fragment give like this. 片段内的java代码就是这样给出的。

public void open_m001_map(){
    Intent i=new Intent(getActivity(),secondActivity.class);
    startActivity(i);
}
  1. Second method is remove 'onClick' from xml file and do as below; 第二种方法是从xml文件中删除“ onClick”,然后执行以下操作;

In xml file, 在xml文件中,

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

In java code, 在Java代码中,

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);
    }
});

'secondActivity' is the name of activity that you want to open. “ secondActivity”是您要打开的活动的名称。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM