2016-11-24 3 views
0

私はアンドロイド開発には新しく、これは簡単な質問です。 、私は、ユーザーがアクセスできるサービスからリソースのリストをロードしてるのonCreateの間に垂直方向とのLinearLayout スクロールレイアウト内で動的に作成されたフラグメントのパーセンテージのサイズを設定します

  • が含まれている活性を有する

    • いることができます:私は、次のことを達成しようとしています各ユーザー各リソースの
    • 、私は特定のタイプの断片を作成し、フラグメントのトランザクションを経由してリニアレイアウトにそれを追加しているため異なること
    • 各フラグメントはアクティビティの高さの1/3を取る必要があります
    • 3つ以上のフラグメントが追加された場合、これらはオフスクリーンになります。 ndはスクロールすることができます

    動的に作成されたフラグメントを設定して画面に対して相対的な高さを設定することはできますが、画面が収まるよりも多くの断片が残されます。私は体重と体重を設定してみましたが、私はすべての断片に等しい重み付けをしたいと考えているので、有用であるとは確信していません。

    フラグメントのレイアウトパラメータを、フラグメントのonCreateView()のLinearLayout.LayoutParamsのインスタンスに設定するコードサンプルがあります。ソリューションにこれが関係する場合、異なるタイプのレイアウトでフラグメントが使用される可能性はどのように処理されますか?フラグメントに含まれていることをフラグメントが知る必要があるという考えは、私には正しいように見えません。任意のヘルプ

  • 答えて

    0

    ちょうどあなたのポイントに答えるため

    ありがとう:

    • あなたはdimens.xmlファイルに設定された寸法を使用して、デバイスのDPI設定(xhdip、xxhdip、に基づいてこれを上書きxx ...など)。特定の画面幅を指定することでオーバーライドすることもできます。マージンとパディングを考慮して、使用可能なスペースを3で割り、それはあなたの幅です。

    • あなたがしたいことは、ScrollViewよりも水平スクロールListViewを使用するほうがよく聞こえますが、どちらも達成できます。 ScrollViewを使用している場合は、各Viewタイプを手動でrootViewに追加するだけです。

    • レイアウトごとに異なるフラグメントを作成する必要はありません。コンストラクタでレイアウトファイルを渡すフラグメントクラスを作成できます。また、ViewHolderパターンを使用して、フラグメント/レイアウトの関係を簡素化する必要があります。そうすれば、少量のロジックで、数十の異なるレイアウトを処理する1つのフラグメントを持つことができます。

    ビューホルダーはパブリックメソッド/プロパティーを持つ単なるPOJOクラスです。 - あなたのビューホルダーがしっかりある

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
        myViewHolder.myTextView.setText("Hello World!"); 
        ... 
    } 
    

    しかし、ここで問題がある:例:それバインド

    public class MyViewHolder { 
        public TextView myTextView; 
    
        public MyViewHolder(View rootView) { 
         myTextView = (TextView) rootView.findViewById(R.id.whatever); 
        } 
    } 
    

    そして、あなた使用:これは以下のように

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
        View rootView = inflater.inflate(R.layout.layout_file, container, false); 
        view.setTag(myViewHolder); 
        return view; 
    } 
    

    は、その後、あなたはビューを設定しますフラグメント&ビューホルダーとの関係1:あなたがパブリックプロパティを公開しましたので、フラグメントに結合され、そのため、あなたは1を作成する必要があります。

    代わりに、あなたは関係を切り離す必要がありますし、フラグメントの延長としてそれを使用して、ビューホルダー内部のロジックが含まれています。

    public interface SomeGenericViewHolder { 
        void doSomething(); 
    } 
    

    インターフェイスはオプションですが、この場合、含まれるデータにアクセスする契約が強制されるため、このインターフェイスを使用する必要があります。

    public class MyViewHolder implements SomeGenericViewHolder { 
        protected TextView myTextView; 
    
        public MyViewHolder(View rootView) { 
         myTextView = (TextView) rootView.findViewById(R.id.whatever); 
        } 
    
        @Override 
        public void doSomething() { 
         myTextView.setText("Hello World!"); 
        } 
    

    その後、あなたのフラグメントを構築する:

    MyFragment fragment = new MyFragment(myViewHolder); 
    
    +0

    おかげで、これは便利です。レイアウトファイルをコンストラクタのフラグメントに渡すと、フラグメントにはデフォルトのコンストラクタしかないはずだと思いましたか? – dco123

    +0

    彼らはあなたが基本的なシステムではない自動的に、自分でインスタンス化しているので、する必要はありません。フラグメントをインスタンス化しないと、意図とは異なる、アクティビティとは異なり、フラグメントは存在しません。 –

    関連する問題