簡體   English   中英

如何在自己的類中使用onClickListener

[英]how to use onClickListener with my own class

我創建了自己的類來模仿Snackbar,我們稱之為CustomSnackbar。 我想要實現的是自定義小吃欄,並能夠從我的主要活動中調用CustomSnackbar,其用法與調用標准Snackbar非常相似。 為了演示不帶全部批量代碼的示例,這里是我的CustomSnackbar類:

package com.wizzkidd.myapp.helpers;

import android.content.Context;
import android.support.design.widget.Snackbar;
import android.util.Log;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class CustomSnackbar {

    Context _context;
    Snackbar snackbar;

    public CustomSnackbar(Context context) {
        this._context = context;
    }

    public void make(View view, CharSequence text, int duration) {
        snackbar = Snackbar.make(view, "", duration);

        Snackbar.SnackbarLayout snackbarLayout = (Snackbar.SnackbarLayout) snackbar.getView();

        TextView textView = (TextView) snackbarLayout.findViewById(android.support.design.R.id.snackbar_text);
        textView.setVisibility(View.INVISIBLE); //hide the default snackbar textview


        //Create my own textview instead
        TextView myTextView = new TextView(_context);
        myTextView.setText(text);

        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); //Create layout params for some text
        myTextView.setLayoutParams(params); //Apply the text layout params

        snackbarLayout.addView(myTextView); //Add my text to the main snackbar layout.  (Other widgets will also be added)
    }

    public void setAction(CharSequence text) {
        snackbar.setAction(text, new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //do something
                Log.v("TAG", "You clicked the action");
            }
        });
    }

    public void show() {
        snackbar.show();
    }
}

在我的MainActivity中,我使用的是這樣的類:

CustomSnackbar customSnackbar = new CustomSnackbar(activity);
customSnackbar.make(view, "This is my snackbar", Snackbar.LENGTH_INDEFINITE);
customSnackbar.setAction("HIDE");
customSnackbar.show();

您可以看到我正在使用.setAction方法傳遞字符串/字符序列,但是我不確定如何在同一調用中處理onClickListener而不是處理類內部的onClickListener

請忽略該類可能顯得毫無意義的事實(但這是因為出於這個問題的目的我已經對其進行了簡化)。 我不確定我是否正確地創建了此類,因此將不勝感激任何其他建議。 謝謝。

您必須將其作為setAction方法的參數提供。 例如

public void setAction(CharSequence text, final View.OnClickListener listener) {

並傳遞提供的實例,或將調用代理到另一個對象

做一個類擴展Snackbar。

然后addMouseListener(classWithExtendedSnackbar)

在其他地方聲明您的OnClickListener ,例如在您正在其中調用方法的Activity中,並將其傳遞給您的類

final View.OnClickListener ocl = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //do something
            Log.v("TAG", "You clicked the action");
        }
}
CustomSnackbar customSnackbar = new CustomSnackbar(activity);
customSnackbar.make(view, "This is my snackbar", Snackbar.LENGTH_INDEFINITE);
customSnackbar.setAction("HIDE", ocl);
customSnackbar.show();

在您的自定義類中:

public void setAction(CharSequence text, final View.OnClickListener ocl) {
    snackbar.setAction(text, ocl);
}

現在在OnClickListener您可以從Activity調用方法

我完全不清楚你的問題。 但是,如果您想制作一個自定義的Snackbar,它將顯示所有消息,並在單擊時提供功能。 然后,您可以嘗試此代碼。

只需調用此方法即可制作小吃吧。

//Here I am sending one as code
showMessage("Snackbar Opened","Close",1)

//send different code based on which you can set something to be done, or identify a button click

private void showMessage(String msg, String action_name, final int code) {
    progress.cancel();
    final Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), msg, Snackbar.LENGTH_INDEFINITE);
    snackbar.setAction(action_name, new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            clearDataForListView();
            if (code == 1) {
               //do something if code is one/if a particular button is clicked

               //you can dismiss anwhere else also.
               snackbar.dismiss();
            } else if (code == 2) {
               //do something if another button is pressed
               snackbar.dismiss();
            }
        }
    });
    snackbar.show();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM