我正在创建一个我希望参与所有活动的菜单。为此,我正在创建一个包含所有按钮定义和onClickListeners的类。
我遇到的问题是定义后退按钮作为物理后退按钮。我创建这个类的方式,它不能识别finish()
,onBackPressed()
等函数。那么,这样做的方法是什么?
public class MenuView extends RelativeLayout {
private final LayoutInflater inflater;
public MenuView(Context context, AttributeSet attrs) {
super(context, attrs);
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.menu_view, this, true);
((ImageView)this.findViewById(R.id.backButton)).setOnClickListener(goBack);
}
private final OnClickListener goBack = new OnClickListener() {
@Override
public void onClick(View v) {
//HERE TO INSERT THE WAY TO DO IT
}
};
答案 0 :(得分:4)
应该足以将context
属性提取为成员变量,并在监听器中使用它,如((Activity) context).finish()
。
答案 1 :(得分:1)
要完成当前可见的Activity
,您需要参考它。
试一试,
public class MenuView extends RelativeLayout {
private final LayoutInflater inflater;
private Activity mActivity;
public MenuView(Context context, AttributeSet attrs) {
super(context, attrs);
mActivity = (Activity)context;
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.menu_view, this, true);
((ImageView)this.findViewById(R.id.backButton)).setOnClickListener(goBack);
}
private final OnClickListener goBack = new OnClickListener() {
@Override
public void onClick(View v) {
mActivity.finish();
}
};
我希望它会有所帮助!
答案 2 :(得分:1)
声明一个context是一个成员变量,并在你的构造函数中分配它:
Context context;
public MenuView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.menu_view, this, true);
((ImageView)this.findViewById(R.id.backButton)).setOnClickListener(goBack);
}
在您的点击监听器中,您可以添加以下代码行:
((Activity) context).finish();
试试吧。希望这会奏效。
答案 3 :(得分:0)
试试这个,onBackPressed()只需调用此方法就可以了
private final OnClickListener goBack = new OnClickListener() {
@Override
public void onClick(View v) {
//HERE TO INSERT THE WAY TO DO IT
onBackPressed();
}
};