2016-06-15 6 views
1

このような質問はたくさんありますが、ルートレイアウトを返す前にonCreateView()にビューを追加することにすべて対処しています。私はこれは私がonCreateView()せずにUIを更新することができない理由である断片であるonClick()フラグメントにイメージビューを追加するには?


ノートで、コード実行の途中でビューを追加したい:

public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.button: 

      //RelativeLayout Setup 
      RelativeLayout relativeLayout = new RelativeLayout(getActivity()); 

      relativeLayout.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 
        RelativeLayout.LayoutParams.MATCH_PARENT)); 

      //ImageView Setup 
      ImageView imageView = new ImageView(getActivity()); 

      //setting image resource 
      imageView.setImageResource(R.drawable.lit); 

      //setting image position 
      imageView.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT)); 

      RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
      params.addRule(RelativeLayout.BELOW, R.id.button); 

      imageView.setLayoutParams(params); 
      //adding view to layout 
      relativeLayout.addView(imageView); 


      break; 
    } 
} 

ここで私はレイアウトのインスタンスを取得し、それを変更します。ただし、この修正されたフラグメントレイアウトをアプリケーションUIに適用することはできません。フラグメントUIの変更後にアプリインターフェースを更新するにはどうすればよいですか?

お時間をいただきありがとうございます。ここで

+1

です。どのような 'View'を動的に作成していても、画面上の' ViewGroup'に追加する必要があります。 –

+0

@MikeM。ありがとうマイクが、 'ViewGroupコンテナ'のインスタンスを保存し、 'container.addView(relativeLayout)'を呼び出すときでさえ、動作しません。私は何をすべきか?ありがとう! –

+0

'onCreateView()'に渡された 'container'を意味するなら、おそらくそれを使いたくないでしょう。これは 'Fragment'の全体の' View'を保持している 'Activity'の' ViewGroup'です。例えば、 'LinearLayout'、' RelativeLayout'などの 'ViewGroup'を' onCreateView() 'で展開しているレイアウトに使いたいでしょう。 –

答えて

0

は、私はそれを行うだろう方法は次のとおりです。私のフラグメントのビューXMLで

  1. 、あなたのImageViewsを保持するためにR.id.containerをのViewGroupと呼ばれています。 onCreateViewに、このコンテナへの参照を保存します。
  2. ImageViewだけを含む別のxmlがあります。このようにして、プログラマティックなレイアウトを行う必要はありません。
  3. あなた onClickで次に

、またはあなたがImageViewのを追加する必要がどこに:

ImageView newView = LayoutInflater.from(getActivity).inflate(R.layout.image.xml); 
mImageContainer.addView(newView); 
// Ta da! 
0

あなただけのビューを作成しましたが、はまだフラグメントのレイアウトにを追加していません。

方法onCreateView()は、このフラグメントのコンテナを返します(例:ViewGroup container)このインスタンスが保存されます

そして、あなたは、ビューを作成するとき、onClick()であなたのRelativeLayoutのように、コンテナに追加し、あなたのUIが更新されます。

container.addView(relativeLayout);

例:

public class MyFragment extends Fragment { 

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

    @Override 
    public void onResume() { 
     super.onResume(); 

     // i did this to see what see how button displays 
     getView().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       // I create a new button and add it to the fragment's layout. 
       Button button = new Button(getActivity()); 
       ((LinearLayout)getView()).addView(button); 
      } 
     }, 2000); 
    } 
} 

レイアウトexample_fragment `Fragment`の` View`だけで、他の `View`のようなものであるだけでのLinearLayout

+0

何らかの理由でaddメソッドが存在しないのですが?保存されたコンテナに追加しようとすると 'メソッドadd(android.widget.RelativeLayout)'を解決できません。私は何をすべきか? –

+0

'container.addView'を試しても動作しません。その他の提案はありますか?本当にありがとう! :) –

+0

フラグメントのレイアウトを拡張するときにフィールドを作成することができます。次に、コードのどこにでもコンテナとして使用します。または、 'onCreateView()によって作成されたビューを取得するために' getView() 'を呼び出してください。 –

関連する問題