如何将参数传递给自定义适配器?

时间:2015-10-31 06:11:03

标签: java android android-fragments android-context android-async-http

我想知道如何将参数传递给自定义适配器。我的错误是

.Actual argument Fragment cannot be converted to context by method invocation conversion
Error:(51, 27) error: constructor CustomAdapter in class CustomAdapter cannot be applied to given types;
required: Context,List<NodesEntity>
found: FriendsFragment,List<NodesEntity>
reason: actual argument FriendsFragment cannot be converted to Context by method invocation conversion

我的片段代码

        public class FriendsFragment extends Fragment {
            ListView video_list;
            AsyncHttpClient client;
            String url = "*some url*";
            Response responseObj;
            CustomAdapter adapter;
            Gson gson;
            private Context globalContext = null;
            public FriendsFragment() {
                // Required empty public constructor
            }

            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                globalContext = this.getActivity().getApplicationContext();
                video_list = (ListView) getView().findViewById(R.id.video_list);
                client = new AsyncHttpClient();
                client.get(FriendsFragment.this, url, new AsyncHttpResponseHandler() {
                    @Override
                    public void onSuccess(int statusCode, cz.msebera.android.httpclient.Header[] headers, byte[] responseBody) {

                        String responsestr = new String(responseBody);
                        gson = new Gson();
                        responseObj = gson.fromJson(responsestr, Response.class);
                        adapter = new CustomAdapter(FriendsFragment.this, responseObj.getNodes());
                        video_list.setAdapter(adapter);

                    }

                    @Override
                    public void onFailure(int statusCode, cz.msebera.android.httpclient.Header[] headers, byte[] responseBody, Throwable error) {

                        //handle error before going to production. maybe use toast or alert.

                    }
                });
                video_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> parent, View videoView, int position, long id) {

                        TextView urlTextView = (TextView) videoView.findViewById(R.id.video_url);
                        String video_url = urlTextView.getText().toString();

                        Log.d("Info", "onItemClick() returned the url: " + video_url);

                        onSampleSelected(video_url);


                    }
                });
            }
            //<Exo Player Invoking Function>
            private void onSampleSelected(String video_url) {

                Intent mpdIntent = new Intent(this, PlayerActivity.class)
                        .setData(Uri.parse(video_url))
                                //.putExtra(PlayerActivity.CONTENT_ID_EXTRA, sample.contentId)
                        .putExtra(PlayerActivity.CONTENT_TYPE_EXTRA, PlayerActivity.TYPE_HLS);
                startActivity(mpdIntent);


            }
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                     Bundle savedInstanceState) {
                View rootView = inflater.inflate(R.layout.fragment_friends, container, false);


                // Inflate the layout for this fragment
                return rootView;
            }

            @Override
            public void onAttach(Activity activity) {
                super.onAttach(activity);
            }

            @Override
            public void onDetach() {
                super.onDetach();
            }
        }




        //Custom Adapter Code


        public class CustomAdapter extends BaseAdapter {

            private List<Response.NodesEntity> mMovieitem;
            private Context mContext;
            private LayoutInflater inflater;

            public CustomAdapter(Context mContext, List<Response.NodesEntity> mMovieitem) {
                this.mContext = mContext;
                this.mMovieitem = mMovieitem;
            }

            @Override
            public int getCount() {
                return mMovieitem.size();
            }

            @Override
            public Object getItem(int position) {
                return mMovieitem.get(position);
            }

            @Override
            public long getItemId(int position) {
                return 0;
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {

                LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View rowView = inflater.inflate(R.layout.each_list_item, parent, false);

                Response.NodesEntity item = (Response.NodesEntity) getItem(position);

                ImageView thumbnail = (ImageView) rowView.findViewById(R.id.thumbnail);
                TextView title = (TextView) rowView.findViewById(R.id.title);
                TextView rating = (TextView) rowView.findViewById(R.id.video_url);

                String imageUrl = item.getVideoTumbnail().getSrc();
                Picasso.with(mContext).load(imageUrl).into(thumbnail);
                title.setText(item.getTitle());
                rating.setText(item.getHlsVideo());

                return rowView;
            }


        }

1 个答案:

答案 0 :(得分:2)

这一行:

adapter = new CustomAdapter(FriendsFragment.this, responseObj.getNodes());

导致问题。

使用FriendsFragment.this.getActivity()代替FriendsFragment.this作为CustomAdapter类构造函数中的第一个参数。