Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中的继承_Android_Inheritance_Onclicklistener - Fatal编程技术网

Android中的继承

Android中的继承,android,inheritance,onclicklistener,Android,Inheritance,Onclicklistener,我的应用程序中有两个活动:菜单活动和主活动 下面是MenuActivityXML 如何在MainActivity中继承OnClick侦听器。简而言之,我在MenuActivity中的代码必须用于其他各种活动,我如何使用它?请支持一段代码,我做了大量的搜索,但没有找到任何相关的。我是Android新手,如果有任何帮助,我将不胜感激。如果你实现了它,你就不会继承它 每个活动都实现自己的onClick(),这为代码提供了更大的灵活性。 编辑 在检查代码之后,您可以简化一些事情,我相信这正是您想要的,

我的应用程序中有两个活动:菜单活动和主活动

下面是MenuActivityXML


如何在
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);
    }
}