不兼容的类型:无法将 AccessControlContext 转换为 ECartHomeActivity(MainActivity)
incompatible types: AccessControlContext cannot be converted to ECartHomeActivity(MainActivity)
我在 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
}
});
这是在 Activity:
中使用的 Utils class 的方法
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 中的。它在片段中工作正常。
问题是您正在尝试将 ECartHomeActivity 转换为具有 ((ECartHomeActivity) (getContext())
的上下文,这将不起作用,因为它是 class 而不是 Activity 实例。
您可以使用 SearchActivity.this
作为 Utils 的 Activity,但将 activity
参数更改为 Activity,如下所示:
public static void switchFragmentWithAnimation(int id, Fragment fragment,
Activity activity, String TAG, AnimationType transitionStyle) {
}
但这可能不是你想要的,我猜你想切换 MainActivity 中的 Fragment。如果这是您想要的,您应该使用 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
}
我在 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
}
});
这是在 Activity:
中使用的 Utils class 的方法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 中的。它在片段中工作正常。
问题是您正在尝试将 ECartHomeActivity 转换为具有 ((ECartHomeActivity) (getContext())
的上下文,这将不起作用,因为它是 class 而不是 Activity 实例。
您可以使用 SearchActivity.this
作为 Utils 的 Activity,但将 activity
参数更改为 Activity,如下所示:
public static void switchFragmentWithAnimation(int id, Fragment fragment,
Activity activity, String TAG, AnimationType transitionStyle) {
}
但这可能不是你想要的,我猜你想切换 MainActivity 中的 Fragment。如果这是您想要的,您应该使用 MainActivity 中的 startActivityForResult()
。为此,首先您需要从 MainActivity:
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
}