0

4 つのボタンを持つダッシュボードを持つアプリケーションを開発しています。各ボタンは、異なるアクティビティへの新しいインテントを開始します。各アクティビティは、カスタム ビューで構成される同じレイアウトをインフレートします。カスタム ビューには ViewPager があります。ViewPager では、上記のアクティビティの配列にある文字列を表示したいと考えています。これらの配列をカスタム ビューに渡して、ViewPager に表示する必要がありますか? もしそうなら、どうすればそれらを渡すことができますか? Custom View は、それらがどのアクティビティから来たのかをどのように知るのでしょうか? 「送信者」アクティビティが現在実行されているアクティビティであることはわかっていますが、どうすれば確認できますか? それとも、配列を静的にして簡単にアクセスできるようにする必要がありますか? この場合、どのアクティビティにアクセスするかを知る必要もあります。アドバイスしてください。または、それを実装するためのより良い方法があるかもしれません。ありがとうございました。

4

1 に答える 1

0

インテントを使用すると、他のアクティビティを開始できます。また、プリミティブ、プリミティブ配列/リスト、およびカスタムParcelableオブジェクトを他のアクティビティに渡すこともできます。

ここで配列データ、スターター アクティビティ名などを渡すことができます。または、getCallingActivity()を使用して送信者のアクティビティを知ることができます。

アップデート:

onCreate()カスタム ビュー クラスにセッター メソッドがある場合は、カスタム ビューにデータを渡すことができます。

より複雑な通信の場合、次のように、アクティビティをその子ビューにインターフェイスします。

インターフェース:

public interface CustomViewParent {
    //----add as many communication methods you want---
    public String[] getData();
    public void doSomething();
}

アクティビティ:

public class MyActivity extends Activity implements CustomViewParent {

// ------------------------ INTERFACE METHODS ------------------------


// --------------------- Interface CustomViewParent ---------------------

    @Override
    public String[] getData() {
        return new String[]{"data1","data2"};
    }

    @Override
    public void doSomething() {
        Toast.makeText(this,"Custom view called me !",Toast.LENGTH_SHORT).show();
    }

// -------------------------- OTHER METHODS --------------------------

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //----here we set the parent--
        ((CustomView)findViewById(R.id.my_custom_view)).setParent(this);
    }
}

Custom View でこのインターフェイスを受け入れて使用します。

public class CustomView extends ViewPager {
// ------------------------------ FIELDS ------------------------------

    private CustomViewParent parent;

// --------------------------- CONSTRUCTORS ---------------------------

    public CustomView(Context context) {
        super(context);
        init();
    }

    public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

// --------------------- GETTER / SETTER METHODS ---------------------

    public void setParent(CustomViewParent parent) {
        this.parent = parent;
    }

// ---------------------------- INITIALIZE-----------------------------
    private void init() {
    //-----initialize/inflate custom views-----

    //-----calls to parent, !! do not forget the null check !! ----
        if(parent != null){
            String[] data = parent.getData();

            parent.doSomething();
        }

    //----add data from parent to Views etc---

    }
}
于 2012-09-04T06:23:06.120 に答える