2016-11-03 25 views
-2

我在片段中有一個按鈕,我需要能夠在活動中訪問以更改其文本。我用我的主要活動驗證碼:如何初始化片段中的按鈕

CategoryFragment frag = new CategoryFragment(); 

getSupportFragmentManager().beginTransaction().add(R.id.activity_main, frag).commit(); 

frag.setButtonText(i); 

問題是按鈕使用onCreateView()方法(該方法甚至從來沒有被調用),這會導致空指針異常從來沒有初始化。我嘗試在片段中添加一個onCreate()方法,該方法被調用,但我必須獲取視圖才能初始化我的按鈕。由於視圖尚未初始化,因此我從視圖中獲得了另一個空指針異常。這是我在onCreate()上的最佳嘗試:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    button = (Button) getView().findViewById(R.id.buttonFrag); 

} 

回答

1

你已經完全誤解了分片方式和活動工作互相。活動主要負責「顯示」片段,並且您需要使用CategoryFragment類來初始化Button。

覆蓋Category FragmentonActivityCreated()然後添加以下內容:

Button button = (Button) getView.findViewById(R.id.your_views_id); 
button.setButton("Voila"); 
0

OnCreateView()這樣做:

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.yout_layout, container, false); 
    button = (Button) rootView.findViewById(R.id.buttonFrag); 
    return rootView; 
} 
0

您可以使用‘靜態工廠方法’請參閱下面的代碼

public class CategoryFragment extends Fragment { 

/** 
* Static factory method that takes an int parameter, 
* initializes the fragment's arguments, and returns the 
* new fragment to the client. 
*/ 
public static CategoryFragment newInstance(String i) { 
    CategoryFragment f = new CategoryFragment(); 
    Bundle args = new Bundle(); 
    args.putInt("buttonText", i); 
    f.setArguments(args); 
    return f; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     mParam = getArguments().getString("buttonText"); 
    } 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view=inflater.inflate(R.layout.fragment_category, container, false); 
    Button b=(Button) view.findViewById(R.id.button); 
    b.setText(mParam); 

    return view; 
} 
} 

,並從你的活動只是叫

getSupportFragmentManager().beginTransaction().add(R.id.activity_main, CategoryFragment.newInstance(i)).commit();