0

ああ、またか。フラグメントを使用してアプリを作成しています。Stefan de Bruijn は、非推奨の TabHost を使用するよりもこれが優れていると提案し、彼は正しかったです。Stefan に感謝します。

やっとひとつのフラグメントから私へのコミュニケーションが取れました。他のメンバーの助けのおかげで、活動はうまくいっています (あなたはあなたが誰であるか知っています、ありがとうございます)。

私は今、うまくいけば最後の問題を抱えています。私のアプリには、アクティビティの一部である TextBox が上部にあり、左側に永続的な ListFragment があり、右側に FrameLayout があり、さまざまなフラグメントを表示できるようになっています。

すべての異なるフラグメントが通信できるアクティビティで好きな場合、一般的な「リスナー」を作成する方法はありますか?

1 つの Fragment を渡すデータを取得するために、以下を使用しました。

主な活動

import com.example.fragger.CoreFragment.OnDataPass;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.EditText;

public class MainActivity extends Activity implements OnDataPass {

およびフラグメントコード:-

package com.example.fragger;


import android.app.Activity;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.os.Bundle;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.view.View.OnClickListener;


public class CoreFragment extends Fragment{

int index;
Button Button1,Button2,Button3;
String Str,data;
OnDataPass dataPasser;

@Override
public void onAttach(Activity a) {
    super.onAttach(a);
        dataPasser = (OnDataPass) a;
}


public static CoreFragment newInstance(int index) {
    CoreFragment coreFragment = new CoreFragment();
    coreFragment.index = index;
    return coreFragment;
}


public interface OnDataPass {
    public void onDataPass(String data);

}

フレームに別のフラグメント (PlaceFragment など) を表示するまでは、これで問題ありません。onDataPass は CoreFragment からインポートして実装しているため、それ以外では使用できません。

これを回避する方法はありますか?

よろしくお願いします。ゲイリー

4

1 に答える 1

2

フラグメント間の通信には、EventBus を使用できます。EventBus は、アクティビティとフラグメントを疎結合にします。

最初のステップは、EventType を定義することです。例えば:CarSelectedEvent

Car(またはあなたの場合はテキストタイプ)を選択すると、CarSelectedEvent が EventBus にポストされる必要があります。例:

eventBus.post(new CarSelectedEvent("volvo"));

イベントに関連するすべてのフラグメントまたはアクティビティは、次のメソッドを実装する必要があります。

onEvent(CarSelectedEvent event){
... update your view
}

車の詳細を表示する 3 つのフラグメントがあるとします。各フラグメントは CarSelectedEvent を受け取り、ビューを更新できます。画面からフラグメントを削除する場合 (たとえば、小さい画面や画面の回転)、ロジックは変更されません。唯一の違いは、イベントを受け取るフラグメントが少ないことです。

EventBus の詳細については、https: //github.com/greenrobot/EventBus を参照してください。

于 2013-01-24T15:53:14.100 に答える