Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Uber RequestButton onClickListener_Android_Api_Uber Api - Fatal编程技术网

Android Uber RequestButton onClickListener

Android Uber RequestButton onClickListener,android,api,uber-api,Android,Api,Uber Api,我正在我的项目中使用。 单击RequestButton,它会将用户导航到Uber应用程序,但我想在它导航到Uber应用程序之前处理一些数据。因此,我需要RequestButton的onClickListener 我已经尝试直接在requestButton的对象上提供onClickListener,然后我得到了事件,但它没有导航到Uber应用程序 如果你想处理Uber SDK无法处理的东西,你需要自定义RequestButton。在单击RequestButton之前调用你自己的自定义代码,即调用

我正在我的项目中使用。 单击RequestButton,它会将用户导航到Uber应用程序,但我想在它导航到Uber应用程序之前处理一些数据。因此,我需要RequestButton的onClickListener

我已经尝试直接在requestButton的对象上提供onClickListener,然后我得到了事件,但它没有导航到Uber应用程序



如果你想处理Uber SDK无法处理的东西,你需要自定义
RequestButton

在单击RequestButton之前调用你自己的自定义代码,即调用它的OnClickListener回调方法,您必须更改rides android sdk中RequestButton的代码

然后在活动中,您必须调用RequestButton对象上的SetCustomPreConclickListener:

public void rideRequestButtonWithCustomPreOnClickListener() {
        RequestButton uberButtonBlack = (RequestButton) findViewById(R.id.uber_button_black);
        RequestButton uberButtonWhite = (RequestButton) findViewById(R.id.uber_button_white);

        RideParameters rideParameters = new RideParameters.Builder()
                .setProductId(UBERX_PRODUCT_ID)
                .setPickupLocation(PICKUP_LAT, PICKUP_LONG, PICKUP_NICK, PICKUP_ADDR)
                .setDropoffLocation(DROPOFF_LAT, DROPOFF_LONG, DROPOFF_NICK, DROPOFF_ADDR)
                .build();

        uberButtonBlack.setRideParameters(rideParameters);
        uberButtonWhite.setRideParameters(rideParameters);

        uberButtonBlack.setCustomPreOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "Custom code for black button called before UberRequestButton's onClick() listener");
            }
        });

        uberButtonWhite.setCustomPreOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "Custom code for white button called before UberRequestButton's onClick() listener");
            }
        });
    }
另一种方法是创建自定义类:

package com.uber.sdk.android.rides.samples;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;

import com.uber.sdk.android.rides.RequestButton;

public class CustomUberRequestButton extends RequestButton implements View.OnClickListener {
    private static final String TAG = CustomUberRequestButton.class.getSimpleName();

    public CustomUberRequestButton(Context context) {
        super(context);
    }

    public CustomUberRequestButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomUberRequestButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void onClick(View v) {
        Log.d(TAG, "Custom code before calling UberRequestButton's onClick() listener");

        // Explicitly need to call UberRequestButton onClick() listener
        super.onClick(v);
    }
}
你是这样使用它的:

/**
 * Please make sure you replace com.uber.sdk.android.rides.RequestButton
 * with com.uber.sdk.android.rides.samples.CustomUberRequestButton inside
 * the res/layout/activity_sample.xml file, otherwise you will get a ClassCastException.
 */
public void rideRequestButtonWithCustomSubclassOnClickListener() {
    CustomUberRequestButton uberButtonBlack = (CustomUberRequestButton) findViewById(R.id.uber_button_black);
    CustomUberRequestButton uberButtonWhite = (CustomUberRequestButton) findViewById(R.id.uber_button_white);

    RideParameters rideParameters = new RideParameters.Builder()
            .setProductId(UBERX_PRODUCT_ID)
            .setPickupLocation(PICKUP_LAT, PICKUP_LONG, PICKUP_NICK, PICKUP_ADDR)
            .setDropoffLocation(DROPOFF_LAT, DROPOFF_LONG, DROPOFF_NICK, DROPOFF_ADDR)
            .build();

    uberButtonBlack.setRideParameters(rideParameters);
    uberButtonWhite.setRideParameters(rideParameters);
}

使用自定义类,如果需要,还可以设置自定义PreConclickListener。请参阅上述提交中的RidereRequestButtonWithCustomSubassassandPreonclicklistener方法。

@bitek的做法是正确的,但下面是覆盖RidereRequestButton的完整解决方案

public class CustomUberButton extends RideRequestButton implements 
 View.OnClickListener {
private View.OnClickListener internalListener;
private View.OnClickListener preClickListener;

public CustomUberButton(Context context) {
    super(context);
}

public CustomUberButton(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public CustomUberButton(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

public void setPreClickListener(OnClickListener preClickListener) {
    this.preClickListener = preClickListener;
}

@Override
public void setOnClickListener(@Nullable OnClickListener l) {
    // redirect the listener to us but keep the original listener registered by the original button to reuse later.
    internalListener = l;
    super.setOnClickListener(this);
}

@Override
public void onClick(View view) {
    preClickListener.onClick(view);
    internalListener.onClick(view);
}
}

上述类可以在xml中使用

<com.example.android.takemehome.uber.CustomUberButton
    android:id="@+id/btn_uber"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    uber:ub__style="black" />

在本例中,“活动”还实现了View.onclick listener

发布您用于导航的代码。@Piyus我这边没有导航到uber的代码。uber SDK中已经有onclick listener。
<com.example.android.takemehome.uber.CustomUberButton
    android:id="@+id/btn_uber"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    uber:ub__style="black" />
mUberButton = (CustomUberButton) findViewById(R.id.btn_uber);
mUberButton.setPreClickListener(this);