简体   繁体   English

使用自定义ArrayAdapter时获取ClassCastException

[英]Getting ClassCastException when using custom ArrayAdapter

I'm trying to use a custom ArrayAdapter with a PageAdapter and ListFragments . 我正在尝试将自定义ArrayAdapterPageAdapterListFragments 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.

相关问题 在Java 8流中使用自定义收集器时获取ClassCastException - Getting a ClassCastException when using a custom Collector with java 8 streams Android-自定义ArrayAdapter中publishResults方法中的ClassCastException - Android - ClassCastException in publishResults method in Custom ArrayAdapter 使用通用自定义类时的ClassCastException - ClassCastException when using generic custom class 在Google Maps中尝试自定义标记时获取classcastException - Getting a classcastexception when trying a custom marker in google maps 使用自定义 ArrayAdapter 时无法解析方法 super - can't resolve method super when using custom ArrayAdapter 当使用自定义arrayadapter在列表视图中单击edittext时,发生错误 - When onclick on the edittext in a listview using custom arrayadapter, Error occur 在分组中使用自定义地图供应商时出现ClassCastException - ClassCastException when using custom map supplier in grouping-by 使用自定义查询时,Spring JPA抛出ClassCastException - Spring jpa throws ClassCastException when using custom Query 使用自定义类加载器时的java.lang.ClassCastException - java.lang.ClassCastException when using custom classloader 使用FragmentTabHost时发生ClassCastException - ClassCastException when using FragmentTabHost
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM