0

私は家の交換アプリに取り組んでいます。ビューページャーを使用して、横方向のナビゲーションを備えた3つの3つのレイアウトを作成しています。問題は、これらのレイアウトが3つの異なるレイアウトリソースファイル(layout1.xml、layout2.xml、layout3.xml)に保存されており、代わりに各画面のコンテンツを動的に作成したいということです。

これは、各ページのコンテンツを示すAdapaterの抜粋です。

   public Object instantiateItem(View collection, int position) {
        LayoutInflater inflater = (LayoutInflater) collection.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        int resId = 0;
        switch (position) {
        case 0:
            resId = R.layout.layout1;
            break;
        case 1:
            resId = R.layout.layout2;
            break;
        case 2:
            resId = R.layout.layout3;
            break;
        }
        View view = inflater.inflate(resId, null);
        ((ViewPager) collection).addView(view, 0);
        return view;
    }

プログラムで簡単なレイアウトを作成し、それを画面の1つに配置するにはどうすればよいですか?私はこれにたくさん取り組んできましたが、それを行う方法についての手がかりを見つけることができません。正しい方向に私を向ける情報は役に立ちます。


編集:

これは私が今試していることです、私はそれほど遠くないと思います、しかしすべての画面は空白です:

Context context = collection.getContext();
LinearLayout layout = new LinearLayout(context);
TextView view = new TextView(context);
switch (position) {
    case 0:
       view.setText("some text");
       view.setPadding(5, 5, 5, 5);
       view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
       break;
    case 1:
       view.setText("some text");
       view.setPadding(5, 5, 5, 5);
       view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
       break;
    case 2:
       view.setText("some text");
       view.setPadding(5, 5, 5, 5);
       view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
       break;
}
layout.addView(view);
return layout;
4

1 に答える 1

1

レイアウトを膨らませる代わりに、レイアウトとビューのオブジェクトを作成して返します。

位置1の例

LinearLayout layout = new LinearLayout(context);
 switch (position) {
        case 0:
           TextView tv = new TextView(context);
           tv.setText("some text");
           tv.setPadding(5, 5, 5, 5);
           tv.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
           // And so on customize and create as many views as you want. 

           // And finally add them to your layout
          layout.addView(tv);
          return layout;

        case 1:
          .
          .
          .
        case 2:
          .
          .
          .
}

アップデート:

質問の更新後に回答を編集します。

私はあなたのコードを取り、それを修正しました。そして、これは機能する必要があります。

@Override
public Object instantiateItem(View container, int position) {
    Context context = collection.getContext();
    LinearLayout layout = new LinearLayout(context);
    TextView view = new TextView(context);

    switch (position) {

    case 0:
       view.setText("some text");
       view.setPadding(5, 5, 5, 5);
       view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
       break;
    case 1:
       view.setText("some text");
       view.setPadding(5, 5, 5, 5);
       view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
       break;
    case 2:
       view.setText("some text");
       view.setPadding(5, 5, 5, 5);
       view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
       break;
    }
    layout.addView(view);
    ((ViewPager) container).addView(layout, 0); // This is the line I added
    return layout;
}
于 2013-01-08T05:23:16.457 に答える