4

3つの別々のアクティビティでactionBar(actionBarSherlock)リストの同じコードを書き直していることに気づきました。3つすべてが同じactionBarを使用しており、アクティビティ#1、#2、#3を起動する3つのアイテムがあります。

getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
ArrayAdapter<CharSequence> list = ArrayAdapter
    .createFromResource(this, R.array.action_list, android.R.layout.simple_dropdown_item_1line);
list.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

getSupportActionBar().setListNavigationCallbacks(list, this);
getSupportActionBar().setListNavigationCallbacks(adapter, this);
getSupportActionBar().setSelectedNavigationItem(position);

2つの質問があります:

  1. この場合、3つのフラグメントで1つのアクティビティを使用する必要がありますか?私の活動は、リストビュー、マップビュー、およびフォームビューです。私の場合、これらのビューのそれぞれが画面全体を使用するため、これがフラグメントを使用するのに適切なケースであるかどうかはわかりません。

  2. 3つの異なるアクティビティを使用して、上記のコードを使用してActionBarを構成することを唯一の目的とする新しいクラスを作成して、初期化コードが1か所にのみ存在するようにすることはできますか?

何かのようなもの:

public class setupActionBar {
    private ActionBar myBar;
    public setupActionBar(ActionBar myBar){
        this.myBar = myBar;
        //Do Initialization on myBar;
    }

    public ActionBar getMyBar(){
        return myBar;
    }
}
4

3 に答える 3

10

このビデオをご覧ください。BaseActivity彼は、プログラムで使用されるすべてのアクティビティをサブクラス化するを作成します。きちんとしたちょっとしたトリック;)

後で私に感謝することができます:D

于 2012-11-08T16:44:40.640 に答える
0

これを行うにはいくつかの方法があります。初期化を行うためにどこかに静的関数を作成することも、アクティビティの基本クラスを作成するようなことを行うこともできます。

例えば:

public class Bob
{
   public static void dance(Dance someDance)
   {
      someDance.doBadDance();
   }
}

これはBob.dance();で使用できます。どこでも。クラスが最終的なものでなければならないかどうかわからない

于 2012-11-08T16:24:24.763 に答える
0

@aindurtiによって提案された優れたチュートリアルを使用して、SherlockActivityを拡張するBaseActivityを使用してこれを機能させ、次にBaseActivityを拡張するActivity1を使用することができました。

しかし、私は奇妙な行動を経験しています。スピナーからアクティビティ#3を選択すると、すぐにアクティビティ#1に戻り、onNavigationItemSelected3回呼び出されます。コードについての考え?onNavigationItemSelected各アクティビティに移動する必要がありますか?これは簡潔で統合された方法として機能すると思いました。

BaseActivity.javaの場合:

@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
    //Tell user the FROM and TO navigationIndex   
    Toast.makeText(getApplicationContext(), "Selected: " + itemPosition + " from" + currentNavigationIndex, Toast.LENGTH_SHORT).show();

    Intent myIntent;
    if(itemPosition != currentNavigationIndex){
        if(itemPosition == 0){ //Activity#1 Selected
            myIntent = new Intent(BaseActivity.this, Activity1.class);
        } else if (itemPosition == 1){ //Activity#2 Selected
            myIntent = new Intent(BaseActivity.this, Activity2.class);
        } else if (itemPosition == 2){ //Activity#3 Selected
            myIntent = new Intent(BaseActivity.this, Activity3.class);
        }
        BaseActivity.this.startActivity(myIntent);
    }
    return true;
}
于 2012-11-10T01:53:03.027 に答える