2016-01-24 4 views
0

У меня есть следующая проблема в коде: я создаю фрагмент, и это нормально.
Моя проблема в том, что я пытаюсь установить его и параметр.
Вот мой код.Создать фрагмент и установить параметр программно

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
     0, ViewGroup.LayoutParams.WRAP_CONTENT); 
params.weight = 1.0f; 

FragmentManager fragmentManager = getFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
FragmentImageList myFragment = new FragmentImageList(); 

fragmentTransaction.add(631, myFragment, "fragmentTag"); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit(); 

myFragment.getView().setLayoutParams(params); 

И затем в консоли у меня есть следующая ошибка.

Attempt to invoke virtual method 'void android.view.View.setLayoutParams(android.view.ViewGroup$LayoutParams)' on a null object reference 

В этом есть смысл, поскольку представление Фрагмента еще не создано. Но как это сделать, чтобы установить «Парамы» созданного Фрагмента.

ответ

1

631, который вы передаете в:

fragmentTransaction.add(631, myFragment, "fragmentTag"); 

должен быть вид идентификатор, на котором вы хотите добавить фрагмент. Удостоверьтесь, что 631 - это идентификатор этого вида, иначе передайте, как R.id.yourViewId

+0

Поскольку до этого я создаю LinearLayout в коде, и это его идентификатор. Целью является создание сетки строк и столбцов без GridLayout. – OneByte

-1

Я не знаю, каковы ваши требования, но я думаю, что вы должны раздувать виды вместо фрагмента.

Фрагменты как заполнители, они автоматически заполняют вид контейнера (например, FrameLyout), и вам не нужно назначать их ширину и высоту вручную. Но если вы все еще хотите сделать это, вы должны делать это в OnCreate View в своем классе Фрагмент

@Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      rootView = inflater.inflate(R.layout.home_fragment, container, false); 

// assign new layout params on rootView here 

---------------------- --------------------ИЛИ----------------------------- -------------------------------------

Использовать макет надувной лодки, чтобы сделать то же самое

 //Use Layout inflater 
     LayoutInflater inflater = (LayoutInflater) context 
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     //Load layout xml of child layout you want to add 
     View childView= inflater.inflate(R.layout.viewpager_place_holder, null); 


     //Get and Assign values on views of child view 
     ((TextView) childView.findViewById(R.id.pager_title)) 
          .setText("Test"); 

     // Set width and margin on child layout 
     LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
         LinearLayout.LayoutParams.MATCH_PARENT, 
         LinearLayout.LayoutParams.WRAP_CONTENT); 

     layoutParams.setMargins(
          UtilFunctions.getUtilFunctions().dpToPixels(5, 
            context.getResources()), 
          UtilFunctions.getUtilFunctions().dpToPixels(5, 
            context.getResources()), 
          UtilFunctions.getUtilFunctions().dpToPixels(5, 
            context.getResources()), 
          UtilFunctions.getUtilFunctions().dpToPixels(5, 
            context.getResources())); 

     //Add child to the root layout 
     rootLayout.addView(childView, layoutParams); 
+0

Зачем голосовать? –

+0

Спасибо за ответ, не используйте его точно, но он дает мне идею :) Спасибо за помощь. – OneByte

0

Спасибо за ответы, я чувствую себя глупо.
Моя цель состояла в том, чтобы создать сетку с Фрагментом.
Но вся эта схема с параметром была совершенно ненужной.

@Hitesh Sahu, еще раз спасибо.
Тщательность ответа была ключевой.

Фрагменты, как заполнители они автоматически заполняют их проведение вид контейнера (например, FrameLyout) и вам не нужно назначать их ширину и высоту вручную.


Просто может создать другой файл разрешения/макета, чтобы использовать его в фрагменте.
Только для этой сетки :)