【问题标题】:onClick not doing anything... "ViewPostImeInputStage ACTION_DOWN"onClick 没有做任何事情...“ViewPostImeInputStage ACTION_DOWN”
【发布时间】:2016-06-26 04:10:21
【问题描述】:

我正在开发一个使用 PayPal 的应用程序。我需要使用 MPL,而不是 SDK,因为我的应用需要能够实现第三方支付。我遵循了各种教程并创建了下面的代码。我没有收到任何编译器错误,也没有 log cat 错误,但是当我运行它并单击“Pay with PayPal”按钮时,什么也没有发生。相反,当我单击按钮或屏幕上的任何位置时,我会得到ViewPostImeInputStage ACTION_DOWN

我不知道为什么。请帮忙!

public class MainActivity extends Activity implements View.OnClickListener {

private CheckoutButton launchPayPalButton;
final static public int PAYPAL_BUTTON_ID = 10001;
private double _theSubtotal;
private double _taxAmount;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    initLibrary();
    showPayPalButton();
}

private void showPayPalButton() {
    LinearLayout linearLayout = new LinearLayout(this);
    linearLayout.setOrientation(LinearLayout.VERTICAL);

    ViewGroup.LayoutParams linearLayoutParam = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

    setContentView(linearLayout, linearLayoutParam);

    LayoutParams lpView = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

    // Generate the PayPal checkout button and save it for later use
    PayPal pp = PayPal.getInstance();
    launchPayPalButton = pp.getCheckoutButton(this, PayPal.BUTTON_194x37, CheckoutButton.TEXT_PAY);

    // The OnClick listener for the checkout button
    launchPayPalButton.setOnClickListener(this);

    // Add the listener to the layout
    launchPayPalButton.setLayoutParams(lpView);
    launchPayPalButton.setId(PAYPAL_BUTTON_ID);
    linearLayout.addView(launchPayPalButton);

   }

public void PayPalButtonClick(View arg0) {
    PayPalPayment newPayment = new PayPalPayment();
    newPayment.setSubtotal(new BigDecimal(_theSubtotal));
    newPayment.setCurrencyType("USD");
    newPayment.setRecipient("my@email.com");
    newPayment.setMerchantName("My Company");
    Intent paypalIntent = PayPal.getInstance().checkout(newPayment, this);
    this.startActivityForResult(paypalIntent, 2);

}



public void initLibrary() {
    PayPal pp = PayPal.getInstance();

    if (pp == null) {  // Test to see if the library is already initialized

        // This main initialization call takes your Context, AppID, and target server
        pp = PayPal.initWithAppID(this, "APP-80W284485P519543T", PayPal.ENV_NONE);

        // Required settings:

        // Set the language for the library
        pp.setLanguage("en_US");

        // Some Optional settings:

        // Sets who pays any transaction fees. Possible values are:
        // FEEPAYER_SENDER, FEEPAYER_PRIMARYRECEIVER, FEEPAYER_EACHRECEIVER, and FEEPAYER_SECONDARYONLY
        pp.setFeesPayer(PayPal.FEEPAYER_EACHRECEIVER);

        // true = transaction requires shipping
        pp.setShippingEnabled(false);


    }

}

@Override
public void onClick(View arg0){

    PayPalButtonClick(arg0);
}

}

【问题讨论】:

    标签: java android paypal


    【解决方案1】:

    可能是因为您没有在 super.oncreate() 之后设置内容视图,并且由于您将 Activity 注册为点击监听器,它会响应来自屏幕上任何位置的点击,而不仅仅是按钮。

    编辑

    像这样为按钮添加一个点击监听器

    paypalButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {  PayPalButtonClick(arg0); }
    });
    

    并从您的活动中删除 OnClickListener 的实现

    【讨论】:

    • 谢谢...我遇到了问题,因为我从未以编程方式设置视图;仅使用 .xml 文件。我应该使用'setContentView(R.layout.activity_main);'吗?如何解决 onClickListener 问题?
    • 看起来您不是从 xml 构建视图,因此在 showPaypalButton() 末尾执行 setContentView(linearLayout) 应该可以工作。
    • 我把它改成了:launchPayPalButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { payPalButtonClick(arg0); } }); 但问题依然存在。另外,我确实在 showPaypalButton 方法中设置了 contentView。
    【解决方案2】:

    ViewPostImeInputStage ACTION_DOWN 基本上是您的布局被拒绝并且您不再能够点击任何可点击项目的情况。解决方案很简单,只需将您的布局内容与父级包装起来。

    例如:

    if you have the xml with format as:
    <LinearLayout <---root layout
     ..... contents here
    </LinearLayout> <-- root layout end
    
    change to 
    
    <FrameLayout <---root layout
       <LinearLayout <-- parent wrap start
       ...
    <!-- your content -->
       </LinearLayout> <-- parent wrap end
    </FrameLayout> <-- root layout end
    

    有关更多信息,您可以考虑阅读this

    【讨论】:

    • 谢谢,但我正在以编程方式创建布局,所以我没有使用 .xml 文件。
    • 我认为我不能,因为我使用的是 PayPal MPL 中的按钮代码。
    • 如果是这样的话,也许你应该从代码中构建这个层次结构并试一试我的意思是用框架布局作为父级!
    • 我不明白你的意思。另外,我真的不明白这个错误的原因。我已阅读您的回复和您发布的链接,但我找不到任何解释为什么会发生这种情况。
    • 我切换了代码,以便从 xml 文件中扩展布局,并以编程方式将按钮添加到该布局中。在 xml 文件中,我将布局包装在父布局中,但问题仍然存在。有什么帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 2016-10-02
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多