1

私は、上部にメニューがあるAndroidアプリに取り組んでいます(ウェブサイトのように、ホーム、アバウトなど)。このメニューはすべてのアクティビティで繰り返されるため、すべてのアクティビティでこれらのコードを繰り返す必要があります。一部のクラスで一度コードを記述し、継承などを使用して他のすべてのアクティビティで再利用できる方法はありますか? (ちょうどシラミが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
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 に答える
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

Yes you can create a layout and include it like this:

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

It has its own class file where common functionality can be kept.

于 2013-10-18T06:57:25.370 に答える
1

I have to repeat the code for these in all activities.

Java does not support multiple inheritances.

Don’t use inheritance just to get code reuse. If there is no is a relationship then use composition for code reuse. Overuse of implementation inheritance (aka extends) can break all the sub-classes, if the superclass is modified.

enter image description here

In you case I would use composition. Just create new class that implements above mentioned Listener logic.

于 2013-10-18T06:57:32.570 に答える
0

すべてのメニューを持つ1 つのアクティビティのみを使用し、アクティビティのフラグメントを作成します。メニューをクリックしてフラグメントを置き換えます。これは、必要に応じて機能を実現するための良い方法です。

于 2014-09-29T10:23:33.913 に答える
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 に答える