1

まず最初に言いたいのは、「こんにちは」と言いたいということです。

要件:

データベースからコントロールに関するメタデータを取得するクライアント アプリケーションを作成できるようにする必要があります。このアプリケーションは、あるビュー (ボタンなどのサブビューを含む) から別のビューに切り替えることができる必要があります。

状態:

インターフェイスとサブクラス (ボタンなど) を使用して、比較的巨大な開発 oo モデルを作成しました。これらはすべて、要求に適切に対応するために特別な独自のインターフェイスを実装しています。フラグメント、フラグメントアクティビティ、およびフラグメントについて読みました。v4 互換性クラスを使用する必要があるため、アクティビティは FragmentActivity から継承し、いくつかの特別な独自のインターフェイスを実装します。FragmentActivity クラスの唯一の参照であるコントローラー クラスが多くのことを行い、最終的にフラグメントを可視化する必要があるところまで来ました。

また、これらのサブビュー (ボタン、ラベル、テキストビュー) をコレクションに既に収集しており、ランタイムで作成された各フラグメントは、画面に「そのサブビューを配置」する必要があります。私のカスタム ビュー "Fragment" は Fragment を継承し、いくつかの特別なものを実装していることを思い出してください。

私のフラグメントは実行時に作成されるため、レイアウトを定義する xml がありません。

質問:

a)xml-layoutなしで作業し、プログラムおよび実行時にフラグメントにレイアウトを適用することは可能ですか? カスタムフラグメントクラスでグローバルに宣言されたレイアウトを使用する最初の試みは成功しませんでした。これは、いくつかの状態で getView() を呼び出したかったのですが、常に null を取得していたためです。したがって、私は尋ねなければなりません

b) 質問 b ( a == true の場合のみ) プログラムでレイアウトを設定するために、いつ、どのようにして getView から正しいビューを受け取ることができますか?

事前にTHX。

4

2 に答える 2

5
package com.example.test;

import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;


public class FragmentExample extends android.app.Fragment
{

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState)
    {
        // TODO Auto-generated method stub
        super.onViewCreated(view, savedInstanceState);

        //Set a linearLayout to add buttons
        LinearLayout linearLayout = new LinearLayout(getActivity());
        // Set the layout full width, full height
        LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        linearLayout.setLayoutParams(params);
        linearLayout.setOrientation(LinearLayout.HORIZONTAL); //or VERTICAL

        Button button = new Button(getActivity());
        //For buttons visibility, you must set the layout params in order to give some width and height: 
        LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        button.setLayoutParams(params);

        Button button2 = new Button(getActivity());
                button2.setLayoutParams(params);
        //... and other views

        ViewGroup viewGroup = (ViewGroup) view;

        linearLayout.addView(button);
        linearLayout.addView(button2);

        viewGroup.addView(linearLayout);
    }
}
于 2013-10-31T15:53:54.777 に答える
0

私は同じ問題を抱えていて、驚いたことに解決策を見つけました! 次のような空白の XML レイアウト ファイルを作成します...

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
</FrameLayout>

レイアウトが動的に作成されるフラグメントで、この空白のレイアウト XML ファイルを拡張します。

  @Override
  public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup     container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.blank_layout, container, false);
    return view;

その後、 onViewCreated() メソッドでレイアウトを動的に作成できます。

  @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
  super.onViewCreated(view, savedInstanceState);

// This will create the LinearLayout
LinearLayout ll = new LinearLayout(mContext);
ll.setOrientation(LinearLayout.VERTICAL);

// Configuring the width and height of the linear layout.
LinearLayout.LayoutParams llLP = new LinearLayout.LayoutParams(
        //android:layout_width="match_parent" an in xml
        LinearLayout.LayoutParams.MATCH_PARENT,
        //android:layout_height="wrap_content"
        LinearLayout.LayoutParams.MATCH_PARENT);
ll.setLayoutParams(llLP);

TextView tv = new TextView(mContext);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,
        LinearLayout.LayoutParams.WRAP_CONTENT);

tv.setLayoutParams(lp);
//android:text="@string/c4r"
tv.setText("Hello android !");
//android:padding="@dimen/padding_medium"
tv.setPadding(8, 8, 8, 8);
ll.addView(tv);

ViewGroup viewGroup = (ViewGroup) view;
viewGroup.addView(ll);
}

}
于 2015-03-05T06:53:01.337 に答える