1

我正在开发一个顶部有菜单的安卓应用程序(就像我们在网站上的一样;主页、关于我们等)。此菜单在所有活动中重复,因此我必须在所有活动中重复这些代码。有没有一种方法可以让我在某个类中编写一次代码,然后在使用继承之类的所有其他活动中重用它?(只是虱子在 php 中有包含函数)。希望我的问题是直截了当的。这是我必须到处重复的菜单代码。

// menu items
menu_home.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(CurrentActivity.this, HomeActivity.class);
startActivity(i);
}
});
menu_help.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(CurrentActivity.this, HelpActivity.class);
startActivity(i);
}
});
menu_media.setOnClickListener(new OnClickListener() {;
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(CurrentActivity.this, MediaActivity.class);
startActivity(i);
}
});
menu_index.setOnClickListener(new OnClickListener() {;
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(HomeActivity.this, IndexActivity.class);
startActivity(i);
}
});

在此处输入图像描述

4

7 回答 7

1

很容易你只需创建一个类

class  MenuActivty extend Activity{

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ((Button)findViewById(R.id.mymenu_home).setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    Intent i = new Intent(this, HomeActivity.class);
    startActivity(i);
    }
    });

    ((Button)findViewById(R.id.mymenu_help).setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    Intent i = new Intent(this, HelpActivity.class);
    startActivity(i);
    }
    });

//... same thing for the others
}
}

小心重命名所有 xml 中的菜单“mymenu”

并且您要使用菜单的所有类都应该是扩展 MenuActivty

并在 xml 中使用

<include layout="@layout/menulayout "
    android:id="@+id/mymenu"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

并创建一个名为 menulayout 的 xml 文件,在其中放置菜单的布局

希望我对你有帮助:)

于 2013-10-18T07:42:50.503 回答
1

Yes you can..for this take one MainActivty and write your menu code in that..after then all your activitys extend that MainActivity like below..

class  MainActivty extend Activity{
}

class FirstActivity extend MainActivity{
}


class SecondActivity extend MainActivity{
}

Then menu will appear in your all activitys..

于 2013-10-18T06:56:36.910 回答
1

是的,您可以创建一个布局并像这样包含它:

<include
android:id="@+id/headerLayout"
layout="@layout/login_header"
/>

它有自己的类文件,可以保留常用功能。

于 2013-10-18T06:57:25.370 回答
1

我必须在所有活动中重复这些代码。

Java 不支持多重继承。

不要仅仅为了代码重用而使用继承。如果没有关系,则使用组合进行代码重用。extends如果修改了超类,过度使用实现继承(aka )可能会破坏所有子类。

在此处输入图像描述

在你的情况下,我会使用composition。只需创建实现上述侦听器逻辑的新类。

于 2013-10-18T06:57:32.570 回答
1
Follow these steps:

1. Create a generic layout for menu and include it wherever you want to use it.
<include
android:id="@+id/headerLayout"
layout="@layout/login_header"
/>

2. Create a class CentralizedHeader. Create on constructor with one parameter of activity type.

3. Create a function here and initialize all views and perform all related functionality here.



     public class CentralizedHeader{

            private Button btnHome, btnContribute;
            private Activity activity;


            public CentralizedHeader(Activity activity) {
                this.activity = activity;
            }

            public void headerActions() {

                btnHome = (Button) activity.findViewById(R.id.btn_home);
                btnContribute = (Button) activity.findViewById(R.id.btn_contribute);


                btnHome.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(activity, MorePackagesActivity.class);
                        activity.startActivity(intent);
                    }
                });

                btnContribute.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(activity, ContributeActivity.class);
                        activity.startActivity(intent);
                    }
                });
            }

        }

4. Create an object of this class in other activity and call its function. ie

public class MainActivity extends Activity {
    private CentralizedHeader headerCentralized;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_home_tab);
        headerCentralized = new CentralizedHeader(this);
        headerCentralized.headerActions();
    }

}
于 2014-09-29T10:11:05.767 回答
0
yes dear you can use it i m talking about function of java code 
Step to reuse it...
 1. make a Singleton class so that that instance is anywhere you can get 
 2. mention all your code in this class 
 3. use all method from this class 


and if you use that layout also then just make one xml and include it in all layout where you want to add :)

i think this post is helpful for you dear :) 
于 2013-10-18T07:28:02.233 回答
0

只使用一个拥有所有菜单的活动并为活动创建片段。点击菜单替换片段。这是实现所需功能的好方法。

于 2014-09-29T10:23:33.913 回答