Android中的继承

sha*_*ala 4 inheritance android onclicklistener

我的应用程序中有两个活动:菜单活动和主要活动.这是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>
Run Code Online (Sandbox Code Playgroud)

这是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>
Run Code Online (Sandbox Code Playgroud)

现在menu1和menu2的On Click 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();
                }
           });

}
Run Code Online (Sandbox Code Playgroud)

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

vil*_*e89 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的活动中执行此操作:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

在其他活动中,您可以这样做:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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