簡體   English   中英

Android按鈕的onClickLIstener()僅在Activity開始時起作用一次,而不是從Fragment事務返回時起作用

[英]Android buttons' onClickLIstener() only works once when the Activity begins, not when returning from Fragment transaction

每當啟動或重新啟動主要活動(即通過按我的操作欄上的主頁按鈕)時,所有按鈕(駐留在該主要活動的片段中)都可以正常工作。 但是,如果我按了其中一個按鈕,然后按了返回按鈕,則home片段及其按鈕會重新出現,但所有按鈕回調均不起作用。 與往常一樣,按鈕圖像在按下時會繼續改變外觀。

回調在home片段的onCreateView方法中分配,如下所示:

 public class HomeFragment extends SherlockFragment {
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     Button button = (Button) v.findViewById(R.id.button);
     button.setOnClickListener(new OnClickListener() {
       @Override
       public void onClick(View arg0) {
         Log.d(TAG, "Button!");
         mActivity.getSupportFragmentManager().beginTransaction()
                  .replace(R.id.contFragMain, new SomeFragment())
                  .addToBackStack(null)
                  .commit();
        }    
     });
 }

這是我使用按鈕啟動的Fragments的超類:

public abstract class RouteListFragment extends SherlockFragment {
  private static final String TAG = RouteListFragment.class.getName();
  private Activity mActivity;                 // parent activity
  RouteListAdapter mAdapter;
  ListView mListViewRouteList;

  public RouteListFragment() {
    super();
  }

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mActivity = getActivity();
  }

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     Bundle bndl = getArguments();  // data passed should contain search term
     View v = inflater.inflate(R.layout.fragment_route_list, container, false);
     mListViewRouteList = (ListView) v.findViewById(R.id.listViewRouteList);
     addRoutesToList(); //Populates the list with data via an async DB call
     return v;
}

您不應存儲“活動”引用; 該Activity可能會在某個時候被重新創建(取決於您的流程),但是您應該在onAttach (Activity activity)重新分配引用,或者只是調用getActivity()來獲取您當前附加的Activity。

所以mActivity.getSupportFragmentManager()...

相反應該是

getActivity().getSupportFragmentManager()...

編輯:等等,也許那是不對的。 onCreateView() v是什么? 您沒有在此Fragment創建任何UI嗎? 您應該使用onViewCreated()獲取對所創建層次結構中視圖的引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM