2017-10-07 3 views
0

Je reçois l'erreur dans cette partie du Activtiy (SearchActivity.java):types incompatibles: AccessControlContext ne peut pas être converti en 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 
      } 
}); 

et c'est la méthode de la classe Utils qui est utilisés dans l'activité:

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

ce code je Copier collé d'un de mes fragments dans ce Searched_Product_Activtiy.java. Cela fonctionne bien dans les fragments.

+0

ne pas coller le code comme image! – phpdroid

Répondre

1

Le problème est que vous essayez de convertir ECartHomeActivity en tant que contexte avec ((ECartHomeActivity) (getContext()) qui ne fonctionnera pas car il s'agit d'une classe et non d'une instance d'activité.

Vous pouvez utiliser SearchActivity.this comme l'activité pour la Utils mais changer le paramètre activity à Activité comme ceci:

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

Mais ce qui est sans doute pas que vous voulez, je suppose que vous voulez changer le Fragment en MainActivity . Si c'est ce que vous vouliez, vous devez utiliser startActivityForResult() à partir de MainActivity. Pour ce faire, vous devez d'abord démarrer le ActivitySearch de votre MainActivity:

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

En second lieu, passer outre onActivityResult() à MainActivity pour recevoir le résultat de 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); 

    } 
    } 
} 

dernier, en ActivitySearch, chaque fois que vous cliquez sur l'article sur la recherche vous devez envoyer le résultat à 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

où dois-je appeler startSearch()? Si je l'appelle dans la méthode onCreate() de MainActivtiy, au démarrage de l'application au lieu de MainActivity, SearchActivity est appelé. MainActivity ouvre aussi –

+0

Vous devez appeler 'startSearch()' quand vous voulez faire la recherche. Pourrait être en cliquant sur une recherche de bouton ou une recherche de menu. –

+0

Merci beaucoup ... –