Android 雄激素类糖类
我有一个问题:我在应用程序中使用SugarORM,在AndroidManifest中,我需要设置:Android 雄激素类糖类,android,android-manifest,classcastexception,sugarorm,Android,Android Manifest,Classcastexception,Sugarorm,我有一个问题:我在应用程序中使用SugarORM,在AndroidManifest中,我需要设置: <meta-data android:name="DATABASE" android:value="moneyManager.db" /> <meta-data android:name="VERSION" android:value="1"/> <meta-data android:name="QUERY_LOG" android:v
<meta-data android:name="DATABASE" android:value="moneyManager.db" />
<meta-data android:name="VERSION" android:value="1"/>
<meta-data android:name="QUERY_LOG" android:value="true"/>
<meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="ua.marinovskiy.moneymanager" />
现在,当我从适配器使用startActivityForResult时:
Intent intent = new Intent(context, NewOperation.class);
((Activity) context).startActivityForResult(intent, MainFragment.REQUEST_CODE);
我认为这个错误:
java.lang.ClassCastException: com.orm.SugarApp cannot be cast to android.app.Activity
我的问题:我如何从清单文件中剪切这个安卓:name=“com.orm.SugarApp”,或者以其他方式解决这个问题
编辑:
public class MainFragment extends Fragment {
public final static int REQUEST_CODE = 1;
ViewPager viewPager;
PagerAdapter viewPagerAdapter;
List<List<CategoryParent>> list;
List<Integer> balance_list = new ArrayList<>();
List<String> periods_list = new ArrayList<>();
SugarHelper sugarHelper;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main,
container, false);
sugarHelper = new SugarHelper();
list = sugarHelper.readAllOoerations(MainActivity.type_of_period, MainActivity.min_date, MainActivity.max_date, MainActivity.addedDate, balance_list);
periods_list = sugarHelper.getPeriods();
viewPager = (ViewPager) view.findViewById(R.id.pager);
viewPagerAdapter = new ViewPagerAdapter(getActivity().getApplicationContext(), list, balance_list, periods_list);
viewPager.setAdapter(viewPagerAdapter);
viewPager.setCurrentItem(MainActivity.addedDate);
return view;
}
@Override
public void onResume() {
super.onResume();
list.clear();
list.addAll(sugarHelper.readAllOoerations(MainActivity.type_of_period, MainActivity.min_date, MainActivity.max_date, MainActivity.addedDate, balance_list));
if (!list.isEmpty()) {
viewPagerAdapter.notifyDataSetChanged();
viewPager.setAdapter(viewPagerAdapter);
viewPager.setCurrentItem(MainActivity.addedDate);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == getActivity().RESULT_OK) {
Toast.makeText(getActivity().getApplicationContext(), "done", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getActivity().getApplicationContext(), "cancel", Toast.LENGTH_SHORT).show();
}
}
}
ua.marinovskiy.moneymanager.adapter.ViewPagerAdapter$1.onChildClick(ViewPagerAdapter.java:95)
在mainFragment.startActivityForResult(intent,mainFragment.REQUEST_代码)
解决方案:
public class MainFragment extends Fragment {
public final static int REQUEST_CODE = 1;
ViewPager viewPager;
PagerAdapter viewPagerAdapter;
List<List<CategoryParent>> list;
List<Integer> balance_list = new ArrayList<>();
List<String> periods_list = new ArrayList<>();
SugarHelper sugarHelper;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main,
container, false);
sugarHelper = new SugarHelper();
list = sugarHelper.readAllOoerations(MainActivity.type_of_period, MainActivity.min_date, MainActivity.max_date, MainActivity.addedDate, balance_list);
periods_list = sugarHelper.getPeriods();
viewPager = (ViewPager) view.findViewById(R.id.pager);
viewPagerAdapter = new ViewPagerAdapter(getActivity().getApplicationContext(), list, balance_list, periods_list);
viewPager.setAdapter(viewPagerAdapter);
viewPager.setCurrentItem(MainActivity.addedDate);
return view;
}
@Override
public void onResume() {
super.onResume();
list.clear();
list.addAll(sugarHelper.readAllOoerations(MainActivity.type_of_period, MainActivity.min_date, MainActivity.max_date, MainActivity.addedDate, balance_list));
if (!list.isEmpty()) {
viewPagerAdapter.notifyDataSetChanged();
viewPager.setAdapter(viewPagerAdapter);
viewPager.setCurrentItem(MainActivity.addedDate);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == getActivity().RESULT_OK) {
Toast.makeText(getActivity().getApplicationContext(), "done", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getActivity().getApplicationContext(), "cancel", Toast.LENGTH_SHORT).show();
}
}
}
我离开
((活动)上下文).startActivityForResult(intent,MainFragment.REQUEST\u代码)当我调用getActivity()上的适配器getActivity().getApplicationContext()时,代码>和片段中的更改 您必须在清单中指定com.orm.SugarApp
,这是不可避免的
您正试图将上下文
强制转换为此行中的活动:
((Activity) context).startActivityForResult(intent, MainFragment.REQUEST_CODE);
context
实际上是com.orm.SugarApp
的一个实例,因此您会遇到崩溃
由于您是从片段执行此操作,因此请改用以下代码:
getActivity().startActivityForResult(intent, MainFragment.REQUEST_CODE);
更新:
不要将应用程序上下文传递给适配器,而是传递活动上下文:
这是错误的:
viewPagerAdapter = new ViewPagerAdapter(getActivity().getApplicationContext(), list, balance_list, periods_list);
viewPager.setAdapter(viewPagerAdapter);
改为这样做:
viewPagerAdapter = new ViewPagerAdapter(getActivity(), list, balance_list, periods_list);
viewPager.setAdapter(viewPagerAdapter);
更新:
您正在实例化一个片段,而不是将其附加到任何东西上,然后尝试使用它触发startActivitiesForResult意图。这是错误的,请使用适配器中已有的上下文:
更改此项:
MainFragment mainFragment = new MainFragment();
mainFragment.startActivityForResult(intent, MainFragment.REQUEST_CODE);
为此:
((Activity) context).startActivityForResult(intent, MainFragment.REQUEST_CODE);
什么是NewOperation.class?它是一个活动,我调用它从碎片执行它,我已经尝试过了,但是接受了NullPointerException。有什么想法吗?这表明该片段没有附加到某个活动。请参阅此处以获取线索:如果您需要更多帮助,可能需要显示更多代码。我需要看看你的碎片,是我做的。请参见编辑后的问题
MainFragment mainFragment = new MainFragment();
mainFragment.startActivityForResult(intent, MainFragment.REQUEST_CODE);
((Activity) context).startActivityForResult(intent, MainFragment.REQUEST_CODE);