Android中的继承

问题描述 投票:4回答:3

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

这是MenuActivity xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MenuActivity" >

    <LinearLayout 
       android:orientation="horizontal"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:padding="10dp"
       android:gravity="center"
       android:background="#000">

        <TextView
            android:text="menu 1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/menu1"
            android:textColor="#fff"
            android:padding="5dp"
         />

         <TextView
            android:text="menu 2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/menu2"
            android:textColor="#fff"
            android:padding="5dp"
         />

    </LinearLayout>

</RelativeLayout>

这是MainActivity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     tools:context=".MainActivity" >

        <include 
            layout="@layout/activity_menu"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
        />

</RelativeLayout>

现在,menu1和menu2的OnClick Listener在MenuActivity.java中定义。

public class MenuActivity extends Activity {

      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(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                     // TODO Auto-generated method stub
                     Toast.makeText(getApplicationContext(), "menu 1 clicked", 5000).show();
                }
           });

           menu2.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                      // TODO Auto-generated method stub
                      Toast.makeText(getApplicationContext(), "menu 2 clicked", 5000).show();
                }
           });

}

如何在MainActivity中继承OnClick侦听器。简而言之,我在MenuActivity中的代码必须用于各种其他活动,我该如何使用它?请支持一段代码,我已经做了很多搜索,但没有找到任何相关的。我是Android新手,任何帮助将不胜感激。

android inheritance onclicklistener
3个回答
5
投票

创建一个在使用这些菜单按钮的每个活动中使用的基类:

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

只需记住在活动布局中包含该菜单布局,这样就不会得到空指针。


0
投票

您无法继承Main活动中Menu Activity的单击侦听器。每个活动都有自己的点击监听器。虽然您可以创建一个通用的方法来执行某些任务并从两个活动中调用该方法,但不能像这样继承它。


0
投票

你没有继承你实现它的OnClickListener! 每个活动都实现了自己的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();
    }
}

如果您不使用它们,最好不要引用textviews

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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.