Android中的继承
我的应用程序中有两个活动:菜单活动和主活动 下面是MenuActivityXMLAndroid中的继承,android,inheritance,onclicklistener,Android,Inheritance,Onclicklistener,我的应用程序中有两个活动:菜单活动和主活动 下面是MenuActivityXML 如何在MainActivity中继承OnClick侦听器。简而言之,我在MenuActivity中的代码必须用于其他各种活动,我如何使用它?请支持一段代码,我做了大量的搜索,但没有找到任何相关的。我是Android新手,如果有任何帮助,我将不胜感激。如果你实现了它,你就不会继承它 每个活动都实现自己的onClick(),这为代码提供了更大的灵活性。 编辑 在检查代码之后,您可以简化一些事情,我相信这正是您想要的,
如何在
MainActivity
中继承OnClick侦听器。简而言之,我在MenuActivity
中的代码必须用于其他各种活动,我如何使用它?请支持一段代码,我做了大量的搜索,但没有找到任何相关的。我是Android新手,如果有任何帮助,我将不胜感激。如果你实现了它,你就不会继承它每个活动都实现自己的
onClick()
,这为代码提供了更大的灵活性。
编辑
在检查代码之后,您可以简化一些事情,我相信这正是您想要的,您可以在活动中实现OnClickListner,并为活动中的所有可单击项编写一个onClick方法。在这里,您可以这样做
public class MenuActivity extends Activity implements OnClickListener
{
TextView menu1, menu2;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
menu1 = (TextView)findViewById(R.id.menu1);
menu2 = (TextView)findViewById(R.id.menu2);
menu1.setOnClickListener(this);
menu2.setOnClickListener(this);
}
@override
onClick( View view )
{
if (view == menu1)
Toast.makeText(getApplicationContext(), "menu 1 clicked", Toast.LONG).show();
if (view == menu2)
Toast.makeText(getApplicationContext(), "menu 2 clicked", Toast.LONG).show();
}
}
如果不使用文本视图,最好不要引用它们
public class MenuActivity extends Activity implements OnClickListener
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
findViewById(R.id.menu1).setOnClickListener(this);
findViewById(R.id.menu2).setOnClickListener(this);
}
@override
onClick( View view )
{
if (view.getId() == R.id.menu1)
Toast.makeText(getApplicationContext(), "menu 1 clicked", Toast.LONG).show();
if (view.getId() == R.id.menu2)
Toast.makeText(getApplicationContext(), "menu 2 clicked", Toast.LONG).show();
}
}
不能在主活动中继承菜单活动的单击侦听器。每个活动都有自己的单击侦听器。尽管您可以创建一个通用方法来执行某些任务,并从两个活动中调用该方法,但不能像这样继承它。创建一个基类,您可以在使用这些菜单按钮的每个活动中使用该基类:
public class BaseActivity extends Activity implements OnClickListener {
@Override
protected void onClick(View view) {
switch(view.getId()) {
case R.id.menu1:
Toast.makeText(this, "Menu1 clicked.", Toast.LENGTH_SHORT).show();
break;
case R.id.menu2:
Toast.makeText(this, "Menu2 clicked.", Toast.LENGTH_SHORT).show();
break;
}
}
}
然后在活动中这样做:
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.menu1).setOnClickListener(this);
findViewById(R.id.menu2).setOnClickListener(this);
}
}
在其他活动中,您也可以这样做:
public class SecondActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
findViewById(R.id.menu1).setOnClickListener(this);
findViewById(R.id.menu2).setOnClickListener(this);
}
}
请记住在活动的布局中包含该菜单布局,这样您就不会得到空指针。因此,如果我必须在所有活动中包含一个菜单栏(例如home、about us等),我是否需要在所有活动中为onClick Listener编写代码?是的,但每个活动I只能编写一个onClick;我附加了一些代码您只需创建一个实现OnClickListener接口的类,并将其在所有活动中传递给您想要的视图您可以按照@kjurkovic的建议执行操作,但这是一个糟糕的做法—修改代码时您会感到头痛—这是真的。这是一种不好的做法,但他确实问过如何在所有活动中使用一位听众。
public class BaseActivity extends Activity implements OnClickListener {
@Override
protected void onClick(View view) {
switch(view.getId()) {
case R.id.menu1:
Toast.makeText(this, "Menu1 clicked.", Toast.LENGTH_SHORT).show();
break;
case R.id.menu2:
Toast.makeText(this, "Menu2 clicked.", Toast.LENGTH_SHORT).show();
break;
}
}
}
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.menu1).setOnClickListener(this);
findViewById(R.id.menu2).setOnClickListener(this);
}
}
public class SecondActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
findViewById(R.id.menu1).setOnClickListener(this);
findViewById(R.id.menu2).setOnClickListener(this);
}
}