2016-06-15 3 views
1

Есть много вопросов, подобных этому, но все они обращаются к добавлению вида в onCreateView() перед возвратом корневого макета. Я хочу добавить представление в середине кода, в onClick()Как добавить изображение в фрагмент?


Примечание это фрагмент, поэтому я не могу обновить пользовательский интерфейс без onCreateView():

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; 
    } 
} 

Здесь я получаю экземпляр макета и изменяю его. Однако я не могу применить этот модифицированный фрагмент в интерфейсе приложения. Как обновить интерфейс приложения после модификации пользовательского интерфейса фрагмента?

Спасибо за ваше время.

+1

Символ '' Fragment' в View' так же, как и любой другой 'View'. Независимо от того, что вы создаете динамически, просто нужно добавить в экранную панель ViewGroup. –

+0

@MikeM. Спасибо Майку, но даже когда я сохраняю экземпляр контейнера ViewGroup и вызываю 'container.addView (relativeLayout)', он не работает. Что мне делать? Благодаря! –

+0

Если вы имеете в виду 'container', переданный в' onCreateView() ', вы, вероятно, не хотите его использовать. Это 'ViewGroup' в' Activity', который держит ваш 'Fragment' весь' View'. Вы захотите использовать «ViewGroup» - например, «LinearLayout», «RelativeLayout» и т. Д. - это в макете, который вы раздуваете в 'onCreateView()'. –

ответ

0

Вот как я бы это сделать:

  1. В видовом XML моего фрагмента, есть ViewGroup называется R.id.container держать ваши ImageViews. В onCreateView сохраните ссылку на этот контейнер.
  2. Имейте отдельный xml, содержащий только ImageView. Таким образом, вам не нужно делать какие-либо программные макеты.

Затем в onClick, или там, где вам нужно добавить ImageView:

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

Вы только что создали вид, но не добавить в макет фрагмента еще.

Метод onCreateView() возвращает контейнер из этого фрагмента, сохранить данный экземпляр (например: ViewGroup container)

И когда вы создаете вид, как ваш RelativeLayout в onClick(), добавьте его в контейнер и ваш пользовательский интерфейс будет обновление.

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 просто LinearLayout

+0

Метод добавления не существует по какой-то причине? Я получаю 'не могу разрешить метод add (android.widget.RelativeLayout)', когда я пытаюсь добавить его в сохраненный контейнер. Что мне делать? –

+0

Даже попытка 'container.addView' не работает. Любые другие предложения? Спасибо! :) –

+0

Вы можете создать поле при раздувании макета фрагмента. Затем используйте его как контейнер в любом месте вашего кода. Или вызовите 'getView()' для получения представления, созданного 'onCreateView()' –

Смежные вопросы