0

i am learning to use custom adapter and i think i am headed to the right direction until i have problem with the super method of the constructor of class Custom Adapter. Could you identify the problem behind it ? Before that i used Simple Adapter but i want more flexibility in controlling the layout. Here is my xml file

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="10dp"
    android:paddingLeft="10dp"
    android:paddingRight="10dp">

    <!-- Name Label -->


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Hello This is testing"
        android:id="@+id/guid"
        android:visibility="gone"/>

    <TextView
        android:id="@+id/name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="2dip"
        android:paddingTop="6dip"
        android:textColor="#43bd00"
        android:text="name:"
        android:textStyle="bold"
        android:visibility="gone"/>

    <!-- Email label -->
    <TextView
        android:id="@+id/email"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="2dip"
        android:textColor="#acacac"
        android:text="email"
        android:textStyle="bold"
        />

    <!-- Mobile number label -->
    <TextView
        android:id="@+id/mobile"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:text="Mobile: "
        android:textColor="#5d5d5d"
        android:maxLines="1"/>


</LinearLayout>

here is my fragment class

public class NewsFragment extends Fragment{

    private ProgressDialog pDialog;// Progress Dialog
    ListView newsList;
    ArrayList<HashMap<String, String>> postList; //Declare Array
    private static String url = "http://wangeltmg.com/GKN_ADMIN/GET_POSTS/get_news.php";
    GetNews.CustomAdapter CA;

    // JSON Node names
    private static final String TAG_ID = "id";
    private static final String POST_ALLPOSTS = "posts";
    private static final String POST_ID = "ID";
    private static final String POST_TITLE = "post_title";
    private static final String POST_CONTENT = "post_content";
    private static final String GUID = "guid";


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.news, container, false);
        newsList = (ListView) view.findViewById(R.id.newsListView);
        TextView topic = (TextView) view.findViewById(R.id.topic);
        postList = new ArrayList<HashMap<String, String>>();
        //Get arguments
        Bundle args = getArguments();
        String mytopic = args.getString("Topic");
        //Set topic
        topic.setText(mytopic.toUpperCase());
        //Execute getContacts
        new GetNews().execute();

        newsList.setOnItemClickListener(new newsListClick());


        return view;
    }

    public class newsListClick implements ListView.OnItemClickListener{

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.d("News List","Clicked " + id);
            android.support.v4.app.FragmentManager fragmentManager = getFragmentManager();
            android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            SinglePost singleFrag = new SinglePost();
            fragmentTransaction.replace(R.id.content_frame, singleFrag);
            fragmentTransaction.commit();
        }
    }


    //Async Task
    private class GetNews extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(getActivity());
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(false);
            pDialog.show();

        }

        @Override
        protected Void doInBackground(Void... arg0) {

            // Creating service handler class instance
            ServiceHandler sh = new ServiceHandler();

            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);
            Log.d("Strings","Checking Json");
            Log.d("Response: ", "> " + jsonStr);

            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);
                    // contacts JSONArray
                    JSONArray posts = null;
                    // Getting JSON Array node
                    posts = jsonObj.getJSONArray(POST_ALLPOSTS);

                    // looping through All Contacts
                    for (int i = 0; i < posts.length(); i++) {

                        JSONObject c = posts.getJSONObject(i);
                        Log.d("Post->",posts.getJSONObject(i).toString());

                        String id = c.getString(POST_ID);

                        Log.d("Post->ID",id);
                        String post_title = c.getString(POST_TITLE);
                        String post_content = c.getString(POST_CONTENT);
                        String guid = c.getString(GUID);
                        Log.d("GUID->",guid);
                        //String gender = c.getString(TAG_GENDER);

                        // tmp hashmap for single post
                        HashMap<String, String> post = new HashMap<String, String>();

                        // adding each child node to HashMap key => value
                        post.put(POST_ID, id);
                        post.put(POST_TITLE, post_title);
                        post.put(POST_CONTENT, post_content);
                        post.put(GUID, guid);

                        // adding contact to contact list
                        postList.add(post);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } else {
                Log.e("ServiceHandler", "Couldn't get any data from the url");
            }

            return null;
        }

        @Override
        public void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();

             // Updating parsed JSON data into ListView
            /*
            ListAdapter adapter = new SimpleAdapter(getActivity(), postList, R.layout.list_item,
                    new String[] { POST_TITLE,POST_CONTENT, GUID },
                    new int[] {R.id.email, R.id.mobile, R.id.guid });
            */

            CA = new CustomAdapter( getActivity(), R.layout.list_item, postList);
            newsList.setAdapter(CA);
        }

        public class CustomAdapter extends ArrayAdapter<HashMap<String, String>>{


            public CustomAdapter(Context context, int resource, ArrayList<HashMap<String, String>> objects) {
                //something is wrong with super
                super(context, resource, objects);

            }
            public View getView(int position, View convertView, ViewGroup Parent){
                if(convertView == null){
                    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    convertView = inflater.inflate(R.layout.list_item,null);

                }

                HashMap<String, String> objects = new HashMap<String, String>();

                TextView thisview = (TextView) convertView.findViewById(R.id.email);
                thisview.setText(objects.get(position).get(POST_TITLE));

                return convertView;
            }
        }//

    }
}
2
  • Are you getting any error?? Commented Apr 17, 2015 at 5:01
  • @PiyushGupta Error:(193, 17) error: no suitable constructor found for ArrayAdapter(NewsFragment.GetNews,int,ArrayList<HashMap<String,String>>) constructor ArrayAdapter.ArrayAdapter(Context,int,int) is not applicable (argument mismatch; NewsFragment.GetNews cannot be converted to Context) constructor ArrayAdapter.ArrayAdapter(Context,int,String[]) is not applicable (argument mismatch; NewsFragment.GetNews cannot be converted to Context) constructor ArrayAdapter.ArrayAdapter(Context,int,List<String>) is not applicable (argument mismatch; NewsFragment.GetNews cannot be converted to Context) Commented Apr 17, 2015 at 5:02

4 Answers 4

4

Change this line

CA = new CustomAdapter(this, R.layout.list_item, postList);

to

CA = new CustomAdapter(getActivity(), R.layout.list_item, postList);

NOTE : While you are using Fragment you should use getActivity() as a Context.

Also keep in mind that you's using HashMap<String,String> so your ArrayAdapter will be ArrayAdapter<HashMap<String, String>> instead of ArrayAdapter<String>.

Sign up to request clarification or add additional context in comments.

13 Comments

I think there are lot more eroors, even after this
It's working ! wow ! but how do i insert the value in the layout?
In getView() method you can set data to your UI from your hash map arraylist.
could you give one example ? Thank you.
HashMap<String, String> post = new HashMap<String, String>(); String abc = post.get("key"); ?
|
2

You are extending ArrayAdapter<String> and passing ArrayList as constructor argument. They both have to be of the same type.

Also, you need to pass Context and not your asynctask GetNews.

You could also look at BaseAdapter where you need not pass any array as constructor argument.

1 Comment

I will take a look at this, it;s new for me .
2

To expand on Piyush's answer, you will also need to modify the CustomAdapter constructor

From this:

public CustomAdapter(GetNews context, ... ) { }

to this

public CustomAdapter(Context context, ... ) { }

This is because getActivity() will return an Activity, which is an instance of the Context class - Not an instance of GetNews

1 Comment

hmm. okay i will apply this as well.
1
    private ArrayList<HashMap<String, String>> mList;
    public void setmList(ArrayList<HashMap<String, String>> mList) {
        this.mList = mList;
    }

    public CustomAdapter(Context context, int resource) {
        //something is wrong with super
        super(context, resource);
    }

and initialize it with setting list

CA = new CustomAdapter(getActivity, R.layout.list_item);
CA.setmList(yourlist);

don't know why the super with three parameter is not working in this case but it will surely resolve your issue

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.