2017-10-07 127 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

非常感謝... –

相關問題