[英]Getting ClassCastException when using custom ArrayAdapter
I'm trying to use a custom ArrayAdapter
with a PageAdapter
and ListFragments
. 我正在尝试将自定义
ArrayAdapter
与PageAdapter
和ListFragments
。 I'm having an issue with the getView
method crashing with ClassCastException
and I can't figure out what I'm doing wrong. 我的
getView
方法因ClassCastException
崩溃而出现问题,我无法弄清楚我在做什么错。
Here is the code for the MainListFragment
, everything up to this point is working. 这是
MainListFragment
的代码, MainListFragment
,一切都可以正常工作。 I should also point out this is a static inner class: 我还应该指出,这是一个静态内部类:
public static class MainListFragment extends ListFragment {
/**
* The fragment argument representing the section number for this
* fragment.
*/
int fragNum;
public static final String ARG_SECTION_NUMBER = "section_number";
private static MainListFragment init(int val) {
MainListFragment mfl = new MainListFragment();
Bundle args = new Bundle();
args.putInt("val", val);
mfl.setArguments(args);
return mfl;
}
public MainListFragment() {
}
/**
* Retrieving this instance's number from its arguments.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fragNum = getArguments() != null ? getArguments().getInt("val") : 1;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
int page = getArguments().getInt(ARG_SECTION_NUMBER);
View rootView = inflater.inflate(R.layout.setting_fragment,
container, false);
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
String arr[] = { "This is", "a ", "Demo", "App", "For", "Showing",
"FragmentPagerAdapter", "and ViewPager", "Implementation" };
SettingListAdapter settingAdapter = new SettingListAdapter(
getActivity().getApplicationContext(),
R.layout.setting_item_row, arr);
ListView listView = (ListView) getActivity().findViewById(android.R.id.list);
listView.setAdapter(settingAdapter);
}
}
Here is the code for my custom ArrayAdapter
: 这是我的自定义
ArrayAdapter
的代码:
public class SettingListAdapter extends ArrayAdapter<String> {
Context context;
int layoutResourceId;
String[] arr;
public SettingListAdapter(Context context, int layoutResourceId,
String[] arr) {
super(context, layoutResourceId, arr);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.arr = arr;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ProfileHolder holder;
if(row == null){
//this is line 35 from the error
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ProfileHolder();
holder.title = (TextView)row.findViewById(R.id.txtTitle);
row.setTag(holder);
}
else{
holder = (ProfileHolder)row.getTag();
}
String profile = arr[position];
holder.title.setText(profile);
return row;
}
static class ProfileHolder{
TextView title;
}
}
Here is the stacktrace that I'm getting: 这是我得到的堆栈跟踪:
10-05 13:14:00.104: E/ListView(4863): android.app.Application
10-05 13:14:00.104: E/ListView(4863): java.lang.ClassCastException: android.app.Application
10-05 13:14:00.104: E/ListView(4863): at com.redclay.fanaddict.helpers.SettingListAdapter.getView(SettingListAdapter.java:35)
10-05 13:14:00.104: E/ListView(4863): at android.widget.AbsListView.obtainView(AbsListView.java:1449)
10-05 13:14:00.104: E/ListView(4863): at android.widget.ListView.makeAndAddView(ListView.java:1801)
10-05 13:14:00.104: E/ListView(4863): at android.widget.ListView.fillDown(ListView.java:671)
10-05 13:14:00.104: E/ListView(4863): at android.widget.ListView.fillFromTop(ListView.java:728)
10-05 13:14:00.104: E/ListView(4863): at android.widget.ListView.layoutChildren(ListView.java:1647)
10-05 13:14:00.104: E/ListView(4863): at android.widget.AbsListView.onLayout(AbsListView.java:1279)
10-05 13:14:00.104: E/ListView(4863): at android.view.View.layout(View.java:7292)
10-05 13:14:00.104: E/ListView(4863): at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
10-05 13:14:00.104: E/ListView(4863): at android.view.View.layout(View.java:7292)
10-05 13:14:00.104: E/ListView(4863): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
10-05 13:14:00.104: E/ListView(4863): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
10-05 13:14:00.104: E/ListView(4863): at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
10-05 13:14:00.104: E/ListView(4863): at android.view.View.layout(View.java:7292)
10-05 13:14:00.104: E/ListView(4863): at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
10-05 13:14:00.104: E/ListView(4863): at android.view.View.layout(View.java:7292)
10-05 13:14:00.104: E/ListView(4863): at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1388)
10-05 13:14:00.104: E/ListView(4863): at android.view.View.layout(View.java:7292)
10-05 13:14:00.104: E/ListView(4863): at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
10-05 13:14:00.104: E/ListView(4863): at android.view.View.layout(View.java:7292)
10-05 13:14:00.104: E/ListView(4863): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
10-05 13:14:00.104: E/ListView(4863): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
10-05 13:14:00.104: E/ListView(4863): at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
10-05 13:14:00.104: E/ListView(4863): at android.view.View.layout(View.java:7292)
10-05 13:14:00.104: E/ListView(4863): at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
10-05 13:14:00.104: E/ListView(4863): at android.view.View.layout(View.java:7292)
10-05 13:14:00.104: E/ListView(4863): at android.view.ViewRoot.performTraversals(ViewRoot.java:1217)
10-05 13:14:00.104: E/ListView(4863): at android.view.ViewRoot.handleMessage(ViewRoot.java:1973)
10-05 13:14:00.104: E/ListView(4863): at android.os.Handler.dispatchMessage(Handler.java:99)
10-05 13:14:00.104: E/ListView(4863): at android.os.Looper.loop(Looper.java:150)
10-05 13:14:00.104: E/ListView(4863): at android.app.ActivityThread.main(ActivityThread.java:4293)
10-05 13:14:00.104: E/ListView(4863): at java.lang.reflect.Method.invokeNative(Native Method)
10-05 13:14:00.104: E/ListView(4863): at java.lang.reflect.Method.invoke(Method.java:507)
10-05 13:14:00.104: E/ListView(4863): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-05 13:14:00.104: E/ListView(4863): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-05 13:14:00.104: E/ListView(4863): at dalvik.system.NativeStart.main(Native Method)
10-05 13:14:01.836: E/ListView(4863): android.app.Application
10-05 13:14:01.836: E/ListView(4863): java.lang.ClassCastException: android.app.Application
10-05 13:14:01.836: E/ListView(4863): at com.redclay.fanaddict.helpers.SettingListAdapter.getView(SettingListAdapter.java:35)
10-05 13:14:01.836: E/ListView(4863): at android.widget.AbsListView.obtainView(AbsListView.java:1449)
10-05 13:14:01.836: E/ListView(4863): at android.widget.ListView.makeAndAddView(ListView.java:1801)
10-05 13:14:01.836: E/ListView(4863): at android.widget.ListView.fillDown(ListView.java:671)
10-05 13:14:01.836: E/ListView(4863): at android.widget.ListView.fillFromTop(ListView.java:728)
10-05 13:14:01.836: E/ListView(4863): at android.widget.ListView.layoutChildren(ListView.java:1647)
10-05 13:14:01.836: E/ListView(4863): at android.widget.AbsListView.onLayout(AbsListView.java:1279)
10-05 13:14:01.836: E/ListView(4863): at android.view.View.layout(View.java:7292)
10-05 13:14:01.836: E/ListView(4863): at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
10-05 13:14:01.836: E/ListView(4863): at android.view.View.layout(View.java:7292)
10-05 13:14:01.836: E/ListView(4863): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
10-05 13:14:01.836: E/ListView(4863): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
10-05 13:14:01.836: E/ListView(4863): at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
10-05 13:14:01.836: E/ListView(4863): at android.view.View.layout(View.java:7292)
10-05 13:14:01.836: E/ListView(4863): at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
10-05 13:14:01.836: E/ListView(4863): at android.view.View.layout(View.java:7292)
10-05 13:14:01.836: E/ListView(4863): at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1388)
10-05 13:14:01.836: E/ListView(4863): at android.view.View.layout(View.java:7292)
10-05 13:14:01.836: E/ListView(4863): at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
10-05 13:14:01.836: E/ListView(4863): at android.view.View.layout(View.java:7292)
10-05 13:14:01.836: E/ListView(4863): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
10-05 13:14:01.836: E/ListView(4863): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
10-05 13:14:01.836: E/ListView(4863): at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
10-05 13:14:01.836: E/ListView(4863): at android.view.View.layout(View.java:7292)
10-05 13:14:01.836: E/ListView(4863): at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
10-05 13:14:01.836: E/ListView(4863): at android.view.View.layout(View.java:7292)
10-05 13:14:01.836: E/ListView(4863): at android.view.ViewRoot.performTraversals(ViewRoot.java:1217)
10-05 13:14:01.836: E/ListView(4863): at android.view.ViewRoot.handleMessage(ViewRoot.java:1973)
10-05 13:14:01.836: E/ListView(4863): at android.os.Handler.dispatchMessage(Handler.java:99)
10-05 13:14:01.836: E/ListView(4863): at android.os.Looper.loop(Looper.java:150)
10-05 13:14:01.836: E/ListView(4863): at android.app.ActivityThread.main(ActivityThread.java:4293)
10-05 13:14:01.836: E/ListView(4863): at java.lang.reflect.Method.invokeNative(Native Method)
10-05 13:14:01.836: E/ListView(4863): at java.lang.reflect.Method.invoke(Method.java:507)
10-05 13:14:01.836: E/ListView(4863): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-05 13:14:01.836: E/ListView(4863): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-05 13:14:01.836: E/ListView(4863): at dalvik.system.NativeStart.main(Native Method)
I have added a comment to where line 35 is in the ArrayAdapter
class. 我已经在
ArrayAdapter
类的第35行添加了注释。
Any help would be great. 任何帮助都会很棒。
You're passing application context to SettingListAdapter's constructor. 您正在将应用程序上下文传递给SettingListAdapter的构造函数。 Then you casting that context to activity (
(Activity)context
) and it obviosly fails. 然后,您将该上下文转换为活动(
(Activity)context
),这显然会失败。 Pass activity context to adapter. 将活动上下文传递给适配器。 Change
getActivity().getApplicationContext()
to getActivity()
. 将
getActivity().getApplicationContext()
更改为getActivity()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.