2017-10-07 88 views
0

我发现了在Activtiy(SearchActivity.java)的这部分的错误:不兼容的类型:的AccessControlContext不能转换到ECartHomeActivity(MainActivity)

// Whenever a view in your cart is clicked 
shoppinListAdapter.SetOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(View view, int position) { 
      Utils.switchFragmentWithAnimation(
            R.id.frag_container, 
            new ProductDetailsFragment("", position, true), 
            ((ECartHomeActivity) (getContext())), null, 
            Utils.AnimationType.SLIDE_LEFT); 
            // ECartHomeActivity is the MainActivity 
      } 
}); 

,这是的Utils类的方法,该方法是在活动中使用:

public static void switchFragmentWithAnimation(int id, Fragment fragment, 
      FragmentActivity activity, String TAG, AnimationType transitionStyle) { 

    FragmentManager fragmentManager = activity.getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

    if (transitionStyle != null) { 
    switch (transitionStyle) { 
     case SLIDE_UP: 
     // Enter from Up 
     fragmentTransaction.setCustomAnimations(R.anim.slide_in_up, 
         R.anim.slide_out_up); 

     break; 

     case SLIDE_LEFT: 
     // Enter from left 
     fragmentTransaction.setCustomAnimations(R.anim.slide_left, 
         R.anim.slide_out_left); 

     break; 

     default: 
     break; 
    } 
    } 

    CURRENT_TAG = TAG; 

    fragmentTransaction.replace(id, fragment); 
    fragmentTransaction.addToBackStack(TAG); 
    fragmentTransaction.commit(); 
} 

此代码,我复制从我的一个片段粘贴到这个Searched_Product_Activtiy.java。它在碎片中工作正常。

+0

请勿将代码粘贴为图片! – phpdroid

回答

1

问题是你试图将ECartHomeActivity作为上下文转换为((ECartHomeActivity) (getContext()),因为它不是一个Activity实例,所以它不起作用。

您可以使用SearchActivity.this作为活动的utils的,但改变activity参数活动这样的:

public static void switchFragmentWithAnimation(int id, Fragment fragment, 
      Activity activity, String TAG, AnimationType transitionStyle) { 
} 

但是,这可能不是你想要的,我想你想切换的片段MainActivity 。如果这是你的意图,你应该使用MainActivity中的startActivityForResult()。要做到这一点,首先你需要从MainActivity开始ActivitySearch:

public static final int REQUEST_CODE = 1; 
... 
public void startSearch() { 
    Intent intent=new Intent(MainActivity.this, ActivitySearch.class); 
    startActivityForResult(intent, REQUEST_CODE); 
} 

其次,覆盖MainActivity onActivityResult()接收来自ActivitySearch结果:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // Check which request we're responding to 
    if (requestCode == REQUEST_CODE) { 
    // Make sure the request was successful 
    if (resultCode == RESULT_OK) { 
     // Call your util here 
     Utils.switchFragmentWithAnimation(
       R.id.frag_container, 
       new ProductDetailsFragment("", position, true), 
       MainActivity.this, null, 
       Utils.AnimationType.SLIDE_LEFT); 

    } 
    } 
} 

最后,在ActivitySearch,只要你点击您需要将搜索项目发送至MainActivity:

shoppinListAdapter.SetOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(View view, int position) { 
      Intent intent=new Intent(); 
      // send data if you want 
      //intent.putExtra("DATA", yourdata); 
      setResult(MainActivity.REQUEST_CODE, intent); 
      finish(); // close the SearchActivity 
     } 
+0

我应该在哪里调用startSearch()?如果我在MainActivtiy的onCreate()方法中调用它,然后在应用程序的开始而不是MainActivity中调用SearchActivity。而且,无论何时我点击该项目而不是片段,MainActivity都会打开 –

+0

无论何时您想要执行搜索,您都需要调用'startSearch()'。可能是点击按钮搜索或菜单搜索时。 –

+0

非常感谢... –

相关问题