2017-10-07 10 views
0

Ich erhalte den Fehler in diesem Teil der Activtiy (SearchActivity.java):inkompatible Typen: AccessControlContext kann nicht in ECartHomeActivity umgewandelt werden (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 
      } 
}); 

und dies ist die Methode der Utils-Klasse, die ist in der Aktivität verwendet:

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

dieser Code ich habe Kopie von einem meiner Fragmente in diesem Searched_Product_Activtiy.java eingefügt. Es funktioniert gut in den Fragmenten.

+0

Code nicht als Bild einfügen! – phpdroid

Antwort

1

Das Problem ist, dass Sie versuchen, ECartHomeActivity als einen Kontext mit zu konvertieren, die nicht funktionieren wird, da es eine Klasse nicht eine Activity-Instanz ist.

Sie können SearchActivity.this als Aktivität für die Utils verwenden, aber die activity Parameter Aktivität wie folgt ändern:

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

Aber das ist wahrscheinlich nicht Sie wollen, ich denke, Sie das Fragment in MainActivity wechseln möchten . Wenn dies das ist, was Sie beabsichtigen, sollten Sie startActivityForResult() von der MainActivity verwenden. Um das zu tun, müssen Sie zuerst die ActivitySearch von Ihrem MainActivity starten:

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

Zweitens außer Kraft setzen onActivityResult() in MainActivity das Ergebnis von ActivitySearch zu erhalten:

@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); 

    } 
    } 
} 

Last, in ActivitySearch, wenn Sie klicken das Element in der Suche müssen Sie das Ergebnis an MainActivity senden:

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

wo soll ich die startSearch() aufrufen? Wenn ich es in der onCreate() -Methode von MainActivtiy anrufe, wird SearchActivity am Anfang der App statt MainActivity aufgerufen. Und auch wenn ich auf das Element statt auf das Fragment klicke, wird MainActivity geöffnet. –

+0

Sie müssen 'startSearch()' aufrufen, wenn Sie die Suche durchführen möchten. Könnte sein, wenn Sie auf eine Schaltflächensuche oder eine Menüsuche klicken. –

+0

Vielen Dank ... –

Verwandte Themen