31

2 つのアクティビティ間のリスナー インターフェイスを作成しようとしていますAct1 and Act2Act1開始しAct2ます。で何らかのイベントが発生するとAct2、 に通知されAct1ます。問題は、Intent を使用して新しいアクティビティを開始していることです。Act1 はどのように Act2 のインターフェイスのリスナーとして自身を割り当てますか?

Act1.java

public class Act1 extends ActionBarActivity implements
        ActionBar.OnNavigationListener {

    ActionBar actionbar;
    Intent pizzaIntent;
    boolean visibleFirstTime = true;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.menutab);

        //set actionbar here
    }

@Override
    public boolean onNavigationItemSelected(int arg0, long arg1)// item pos,
                                                                // itemid
    {
        switch (arg0) {
        case 0:
            if(this.visibleFirstTime == false)
            {
            if(pizzaIntent == null)
            {
                pizzaIntent = new Intent(this,Act2.class);
                //how to call setChangeListener?
            }
            startActivity(pizzaIntent);
            }
            else
                this.visibleFirstTime = false;
            break;
        case 1:
            System.out.println("selected: " + arg0);
            break;
        case 2:
            System.out.println("selected: " + arg0);
            break;
        case 3:
            System.out.println("selected: " + arg0);
            break;
        default:
            break;
        }
        return true;
    }
}

Act2.java

public class Act2 extends Activity {

     selectionChangeListener listener;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pizza_slice_selection);
    }

    public void setChangeListener(selectionChangeListener listener)
    {
        this.listener = listener;
    }

    private interface selectionChangeListener
    {
        public void selectionMadeAtIndex(int index);
    }
}

注:フラグメントの使用を提案しないでください。現在アクティビティを使用したい。

4

3 に答える 3

32

LocalBroadcastManager の使用を検討しましたか?

Act1 の onCreate では:

act2InitReceiver= new BroadcastReceiver()
    {

        @Override
        public void onReceive(Context context, Intent intent)
        {
            // do your listener event stuff
        }
    };
LocalBroadcastManager.getInstance(this).registerReceiver(act2InitReceiver, new IntentFilter("activity-2-initialized"));

Act1 の onDestroy では:

LocalBroadcastManager.getInstance(this).unregisterReceiver(act2InitReceiver);

Act2 の onCreate では:

LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("activity-2-initialized"));

コードがコンパイルされない場合はコメントをください。手で書いています。

于 2013-09-26T11:16:56.727 に答える