2016-01-24 68 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 

由於Fragment的視圖還沒有被創建,其中有意義。 但如何做到這一點來設置創建片段的「參數」。

回答

1

631要傳遞到:

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

應該是要在其上添加片段的視圖id。 請確保631是該視圖的ID,否則通過像R.id.yourViewId

+0

因爲在此之前,我在代碼中創建了LinearLayout,這是他的ID。 目標是創建一個沒有GridLayout的行和列的網格。 – OneByte

-1

我不知道你的要求是什麼,但我認爲你應該充氣視圖而不是片段。

片段就像佔位符,它們會自動填充它們的容器視圖(例如FrameLyout),並且您不需要手動分配它們的寬度和高度。但如果你仍然想這樣做,你應該在你的片段類中創建視圖

@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

感謝您的回答,我感到很蠢。
我的目標是用Fragment創建一個網格。
但是這個帶參數的整個方案完全沒有必要。

@Hitesh Sahu,再次感謝你。
答案的一部分是關鍵。

片段就像是他們的佔位符自動填寫其持有 容器視圖(如FrameLyout),你不需要手動分配他們的 寬度和高度。


根本就創建在該片段中使用它的另一個RES /佈局文件。
只適用於此格:)

相關問題