我正在尝试实现可重用的视图并创建一个适用于所有类的OnClickListener。我的代码如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout layout = (LinearLayout)findViewById(R.id.layout1);
Button button = (Button) findViewById(R.id.layout1).findViewById(R.id.button1);
Button button2 = (Button) findViewById(R.id.layout1).findViewById(R.id.button2);
Button button3 = (Button) findViewById(R.id.layout1).findViewById(R.id.button3);
applyListener(layout,listener);
applyListener(layout,listener);
applyListener(layout,listener);
}
OnClickListener listener = new OnClickListener() {
public void onClick(View view) {
switch (view.getId()){
case R.id.button1:
Toast.makeText(getApplicationContext(), "ONE",Toast.LENGTH_LONG).show();
Intent intent = new Intent(MainActivity.this, P2.class);
startActivity(intent);
break;
case R.id.button2:
Toast.makeText(getApplicationContext(), "TWO",Toast.LENGTH_LONG).show();
Intent intent2 = new Intent(MainActivity.this, P3.class);
startActivity(intent2);
break;
case R.id.button3:
Toast.makeText(getApplicationContext(), "THREE",Toast.LENGTH_LONG).show();
Intent intent3 = new Intent(MainActivity.this, P4.class);
startActivity(intent3);
break;
}
}
private Context getContext() {
// TODO Auto-generated method stub
return null;
}
};
private static void applyListener(View child, OnClickListener listener) {
if (child == null)
return;
if (child instanceof ViewGroup) {
applyListener((ViewGroup) child, listener);
}
else if (child != null) {
if(child.getId() == R.id.button1) {
child.setOnClickListener(listener);
}
if(child.getId() == R.id.button2) {
child.setOnClickListener(listener);
}
if(child.getId() == R.id.button3) {
child.setOnClickListener(listener);
}
}
}
private static void applyListener(ViewGroup parent, OnClickListener listener) {
for (int i = 0; i < parent.getChildCount(); i++) {
View child = parent.getChildAt(i);
if (child instanceof ViewGroup) {
applyListener((ViewGroup) child, listener);
} else {
applyListener(child, listener);
}
}
}
}
问题是,一旦它移出MainActivty,它会在我按下任何按钮后立即崩溃。我确信这与该行有关:
Intent intent = new Intent(MainActivity.this, P2.class);
我认为这个问题与它正在引用一个非活动的类这一事实有关,例如MainActivity.this。我尝试用以下方法替换MainActivity.this:
this
和
getContext()
和
getBaseContext()
但它们不起作用。
我也试过
Intent intent = new Intent("com.example.APANEL.P2.class");
但这也不起作用。
我确信applyListener方法正在正确实现,因为按钮都是子项,因此正在使用该方法实现:
private static void applyListener(ViewGroup parent, OnClickListener listener)
我已经阅读了android文档和我能找到的每篇文章,但我似乎无法找到可行的解决方案。
任何帮助都会有很大帮助
答案 0 :(得分:0)
我通过以下方式解决了这个问题:
在MainActivity类中,我创建了方法:
public void setup(){
LinearLayout layout = (LinearLayout)findViewById(R.id.layout1);
Button button = (Button) findViewById(R.id.layout1).findViewById(R.id.button1);
Button button2 = (Button) findViewById(R.id.layout1).findViewById(R.id.button2);
Button button3 = (Button) findViewById(R.id.layout1).findViewById(R.id.button3);
applyListener(layout,listener);
}
然后,重新使用视图的所有类(例如显示按钮面板)必须扩展MainActivity,并且在onCreate()
方法中,它们实现方法setup()
总而言之,它与Intent无关,而是与后续类中没有设置侦听器这一事实有关。