2013-10-10 110 views
0

我正在创建一个菜单,我想要在所有的活动中。为此,我创建了一个包含所有按钮定义和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

您的回答是正确的,您是对的,但接受的更详细,所以对我来说更容易理解 – masmic

回答

1

声明的上下文是一个成员变量,并为它分配在你的构造是这样的:

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(); 

试试吧。希望这会起作用。

0

试试这个,onBackPressed()只需要调用此方法,将工作

private final OnClickListener goBack = new OnClickListener() { 
@Override 
public void onClick(View v) { 
    //HERE TO INSERT THE WAY TO DO IT 

onBackPressed(); 
} 
}; 
+0

'onBackPressed()方法未定义为类型new View.onClickListener()'。 – masmic

4

应该是足够的提取context属性作为成员变量,并用它在听众喜欢((Activity) context).finish()

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(); 
    } 
}; 

我希望这会有所帮助!

+0

试过这个,但是当膨胀类到inster到布局时,我得到下面的'下面的类不能实例化',它引用我定义活动的行 – masmic