代码之家  ›  专栏  ›  技术社区  ›  Vivek Thakkar

不兼容的类型:AccessControlContext无法转换为ECartHomeActivity(MainActivity)

  •  0
  • Vivek Thakkar  · 技术社区  · 8 年前

    我在Activtiy(SearchActivity.java)的这一部分中发现了错误:

    // 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
               }
    });
    

    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();
    }
    

    1 回复  |  直到 8 年前
        1
  •  1
  •   ישו אוהב אותך Mahavir    8 年前

    ((ECartHomeActivity) (getContext()) 这将不起作用,因为它是一个类而不是活动实例。

    您可以使用 SearchActivity.this 作为UTIL的活动,但更改 activity 参数到 活动

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

    但这可能不是你想要的,我想你想要切换MainActivity中的片段。如果这是你想要的,你应该使用 startActivityForResult() 从主活动。为此,首先需要从主活动启动ActivitySearch:

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

    第二,覆盖 onActivityResult() 在MainActivity中,接收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
           }