LongClickListener无法正常工作

时间:2017-02-14 09:51:34

标签: android button onclicklistener onlongclicklistener

我想为我的片段中的每个按钮添加longClickListener。为此,我编写了这段代码,我在OnCreate()中调用它。我的项目是Tabbed Activity。

我在我的主要活动中实现了OnLongClickListener。

public class MainActivity extends AppCompatActivity implements View.OnLongClickListener

我在MainActivity.java中也有onLongClick方法

@Override
    public boolean onLongClick(View v) {.......}

这是我在onCreate();

中的方法
public void InflateFragments(){

        final RelativeLayout lay = (RelativeLayout) findViewById(R.id.Page1Lay);
        View viev = getLayoutInflater().inflate(R.layout.fragment_page1, lay, false);


        for(int i  = 0; i < IDs.length; i++){
            Button button = (Button) viev.findViewById(IDs[i]);

            if(button != null)                    
                button.setOnLongClickListener(this);  
                Log.i("OK","Listener set on button : " + IDs[i]);
             }
    }

ID,是一个包含我的按钮id的int数组。这个代码可以到达我的片段中的每个按钮,并为每个按钮设置OnLongClickListener,因为没有异常或任何错误。我可以查看Log.i()的控制台上的消息。

但是当我在虚拟设备上运行此代码时,当我点击很长时间时没有任何事情发生。我不知道为什么。

我的按钮是布局,我的每个按钮都有;

android:longClickable="true"

我的main_activity.xml;

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


<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.example.aslan.rte3.MainActivity">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:weightSum="1">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/appbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="@dimen/appbar_padding_top"
            android:theme="@style/AppTheme.AppBarOverlay"
            android:background="@android:color/black">

            <android.support.design.widget.TabLayout
                android:id="@+id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:tabGravity="center"
                app:tabMode="scrollable" />

        </android.support.design.widget.AppBarLayout>


        <android.support.v4.view.ViewPager
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            android:background="#E0DFDE">

        </android.support.v4.view.ViewPager>

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:background="#E0DFDE">

            <com.google.android.gms.ads.AdView
                android:id="@+id/adView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                ads:adSize="SMART_BANNER"
                ads:adUnitId="..."
                android:layout_alignParentBottom="true"
                android:layout_alignParentStart="true"
                android:layout_alignParentLeft="true" />
        </FrameLayout>

    </LinearLayout>

</android.support.design.widget.CoordinatorLayout>

2 个答案:

答案 0 :(得分:0)

而不是:

View viev = getLayoutInflater().inflate(R.layout.fragment_page1, lay, false);

试试这个:

View viev = LayoutInflater.from(this).inflate(R.layout.fragment_page1, lay, false);

答案 1 :(得分:0)

尝试一次;

@Override
public boolean onLongClick(View v) {
    Log.e("ID", ""+v.getId());
    return true;
}

然后,检查此处的视图ID是否与按钮的ID相同。