如何将 onClickListener 与我自己的一起使用 class
how to use onClickListener with my own class
我创建了自己的 class 来模仿 Snackbar,我们称它为 CustomSnackbar。我想要实现的是自定义 snackbar 并能够从我的 main activity 调用 CustomSnackbar 并且用法与调用标准 Snackbar 非常相似。为了在没有所有批量代码的情况下演示我的示例,这里是我的 CustomSnackbar class:
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 中,我使用这样的 class:
CustomSnackbar customSnackbar = new CustomSnackbar(activity);
customSnackbar.make(view, "This is my snackbar", Snackbar.LENGTH_INDEFINITE);
customSnackbar.setAction("HIDE");
customSnackbar.show();
您可以看到我正在使用我的 .setAction 方法传递 string/charsequence,但我不确定如何在同一个调用中处理 onClickListener,而不是在 class[ 中处理 onClickListener =13=]
请忽略 class 可能看起来毫无意义的事实(但这是因为我为了这个问题的目的对其进行了简化)。我不确定我是否正确地创建了这个 class,所以任何额外的意见或建议将不胜感激。谢谢
您必须将其作为参数提供给您的 setAction
方法。例如
public void setAction(CharSequence text, final View.OnClickListener listener) {
并传递提供的实例,或将调用代理到另一个对象
class 扩展 Snackbar。
然后添加MouseListener(classWithExtendedSnackbar)
在其他地方声明您的 OnClickListener
,例如在您调用方法的 Activity
中,并将其传递给您的 class
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();
在您的自定义中 class:
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();
}
我创建了自己的 class 来模仿 Snackbar,我们称它为 CustomSnackbar。我想要实现的是自定义 snackbar 并能够从我的 main activity 调用 CustomSnackbar 并且用法与调用标准 Snackbar 非常相似。为了在没有所有批量代码的情况下演示我的示例,这里是我的 CustomSnackbar class:
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 中,我使用这样的 class:
CustomSnackbar customSnackbar = new CustomSnackbar(activity);
customSnackbar.make(view, "This is my snackbar", Snackbar.LENGTH_INDEFINITE);
customSnackbar.setAction("HIDE");
customSnackbar.show();
您可以看到我正在使用我的 .setAction 方法传递 string/charsequence,但我不确定如何在同一个调用中处理 onClickListener,而不是在 class[ 中处理 onClickListener =13=]
请忽略 class 可能看起来毫无意义的事实(但这是因为我为了这个问题的目的对其进行了简化)。我不确定我是否正确地创建了这个 class,所以任何额外的意见或建议将不胜感激。谢谢
您必须将其作为参数提供给您的 setAction
方法。例如
public void setAction(CharSequence text, final View.OnClickListener listener) {
并传递提供的实例,或将调用代理到另一个对象
class 扩展 Snackbar。
然后添加MouseListener(classWithExtendedSnackbar)
在其他地方声明您的 OnClickListener
,例如在您调用方法的 Activity
中,并将其传递给您的 class
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();
在您的自定义中 class:
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();
}