0

每当主 Activity 启动或重新启动(即通过按我的操作栏上的主页按钮)时,所有按钮(位于此主 Activity 的片段中)都可以正常工作。但是,如果我按下其中一个按钮,然后按下后退按钮,主页片段及其按钮会重新出现,但所有按钮回调都不起作用。按钮图像在按下时继续改变外观,一如既往。

回调在 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;
}
4

1 回答 1

0

您不应该隐藏 Activity 参考;Activity 可能会在某个时候重新创建(取决于您的流程),但是您应该重新分配 in 中的引用onAttach (Activity activity),或者只是调用getActivity()以获取您所附加的当前 Activity。

所以mActivity.getSupportFragmentManager()...

应该改为

getActivity().getSupportFragmentManager()...

编辑:等等,也许那是不对的。v里面有什么onCreateView()?您没有在此创建任何 UIFragment吗?您应该使用onViewCreated()来获取对已创建层次结构中视图的引用。

于 2013-08-03T05:58:23.810 回答