4

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

这是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 监听器在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. 简而言之,我的代码MenuActivity必须在各种其他活动中使用,我该如何使用它?请支持一段代码,我做了很多搜索,但没有找到任何相关的东西。我是Android新手,任何帮助将不胜感激。

4

3 回答 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);
    }
}

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

于 2013-10-21T12:22:01.263 回答
0

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

于 2013-10-21T11:45:49.227 回答
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();
    }
}

如果您不使用它们,最好不要引用文本视图

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();
    }
}
于 2013-10-21T11:34:13.017 回答