-1

Here is my code of the populated listview adapter that I have

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;

public class ListViewAdapter extends BaseAdapter {

    private Activity activity;
    private LayoutInflater inflater;
    private List<Contact> DataList;


    public ListViewAdapter(Activity activity, List<Contact> dataitem) {
        this.activity = activity;
        this.DataList = dataitem;
    }

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

    @Override
    public Object getItem(int location) {
        return DataList.get(location);
    }

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

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

        if (inflater == null)
            inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null)
            convertView = inflater.inflate(R.layout.list, null);

        TextView name = (TextView) convertView.findViewById(R.id.name);
        TextView companyName = (TextView) convertView.findViewById(R.id.companyName);

        Contact m = DataList.get(position);

        name.setText(m.getName());
        companyName.setText(String.valueOf(m.getCompanyName()));


        return convertView;
    }




}

And here is my main

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity {
    private static final String url = "https://s3.amazonaws.com/technical-challenge/v3/contacts.json";
    private List<Contact> l = new ArrayList<Contact>();
    private ListView listView;
    private ListViewAdapter adapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView) findViewById(R.id.list);
        adapter = new ListViewAdapter(this, l);
        listView.setAdapter(adapter);


        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                Intent i = new Intent(MainActivity.this, ContactDetail.class);


                startActivity(i);
            }
        });



        JsonArrayRequest jsonreq = new JsonArrayRequest(url,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {

                        for (int i = 0; i < response.length(); i++) {
                            try {
                                JSONObject obj = response.getJSONObject(i);
                                Contact dataSet = new Contact();

                                dataSet.setName(obj.getString("name"));

                                dataSet.setCompanyName(obj.getString("companyName"));


                                l.add(dataSet);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                        }
                        adapter.notifyDataSetChanged();
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                AlertDialog.Builder add = new AlertDialog.Builder(MainActivity.this);
                add.setMessage(error.getMessage()).setCancelable(true);
                AlertDialog alert = add.create();
                alert.setTitle("Error!!!");
                alert.show();
            }
        });
        Controller.getInstance(this).addToRequestQueue(jsonreq);

    }
}

}

this code works properly and populates my listview, however, when I click on an item in the listview I have another listview populating that displays all contact items...I just want ONE contact item to display.

import android.app.Activity;
import android.content.Context;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

public class ListViewContactAdapter extends BaseAdapter {

    private Activity activity;
    private LayoutInflater inflater;
    private List<Contact> DataList;



    public ListViewContactAdapter(Activity activity, List<Contact> dataitem) {
        this.activity = activity;
        this.DataList = dataitem;
    }

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

    @Override
    public Object getItem(int location) {
        return DataList.get(location);
    }

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

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

        if (inflater == null)
            inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null)
            convertView = inflater.inflate(R.layout.contactlistinfo, null);


        ImageView i = (ImageView) convertView.findViewById(R.id.imageView2);
        TextView tv2 = (TextView) convertView.findViewById(R.id.textView2);
        TextView tv4 = (TextView) convertView.findViewById(R.id.textView4);
        TextView tv6 = (TextView) convertView.findViewById(R.id.textView6);
        TextView tv8 = (TextView) convertView.findViewById(R.id.textView8);
        TextView tv17 = (TextView) convertView.findViewById(R.id.textView17);
        TextView tv18 = (TextView) convertView.findViewById(R.id.textView18);
        TextView tv19 = (TextView) convertView.findViewById(R.id.textView19);
        TextView tv20 = (TextView) convertView.findViewById(R.id.textView20);

        TextView tv10 = (TextView) convertView.findViewById(R.id.textView10);
        TextView tv12 = (TextView) convertView.findViewById(R.id.textView12);
        TextView tv14 = (TextView) convertView.findViewById(R.id.textView14);
        TextView tv16 = (TextView) convertView.findViewById(R.id.textView16);


        Contact m = DataList.get(position);


        tv2.setText(m.getName());
        tv4.setText(m.getCompanyName());
        tv6.setText(m.getHome());
        tv12.setText(m.getMobile());
        tv14.setText(m.getWork());
        tv8.setText(m.getStreet());
        tv18.setText(m.getCity());
        tv17.setText(m.getState());
        tv19.setText(m.getZipCode());
        tv20.setText(m.getCountry());


        tv10.setText(m.getBirthdate());
        tv16.setText(m.getEmail());

        i.setImageURI(Uri.parse("https://s3.amazonaws.com/technical-challenge/v3/images/elmer-fudd-small.jpg"));

        return convertView;


    }


} 

Now here is where I have it being populated. But why does it display as another list listview? I want only ONE item.

import android.app.AlertDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListView;

import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class ContactDetail extends AppCompatActivity {


    private static final String url = "https://s3.amazonaws.com/technical-challenge/v3/contacts.json";
    private List<Contact> l = new ArrayList<Contact>();
    private ListView listView;
    private ListViewContactAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_contact_detail);

        listView = (ListView) findViewById(R.id.list2);
        adapter = new ListViewContactAdapter(this, l);


        listView.setAdapter(adapter);


        JsonArrayRequest jsonreq = new JsonArrayRequest(url,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {

                        for (int i = 0; i < response.length(); i++)
                            try {
                                JSONObject obj = response.getJSONObject(i);




                                // Phone
                                JSONObject phone = obj.getJSONObject("phone");
                                String home = phone.getString("home");
                                String mobile = phone.getString("mobile");
                                String work = phone.getString("work");


                                //Address
                                JSONObject address = obj.getJSONObject("address");
                                String street = address.getString("street");
                                String city= address.getString("city");
                                String state= address.getString("state");
                                String country= address.getString("country");
                                String zipCode= address.getString("zipCode");

                                Contact dataSet = new Contact();


                                dataSet.setName(obj.getString("name"));
                                dataSet.setCompanyName(obj.getString("companyName"));
                                dataSet.setBirthdate(obj.getString("birthdate"));
                                dataSet.setEmail(obj.getString("emailAddress"));

                                dataSet.setHome(home);
                                dataSet.setMobile(mobile);
                                dataSet.setWork(work);

                                dataSet.setStreet(street);
                                dataSet.setState(state);
                                dataSet.setCity(city);
                                dataSet.setZipCode(zipCode);
                                dataSet.setCountry(country);

                                dataSet.setImage(obj.getString("largeImageURL"));

                                l.add(dataSet);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }



                        adapter.notifyDataSetChanged();
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                AlertDialog.Builder add = new AlertDialog.Builder(ContactDetail.this);
                add.setMessage(error.getMessage()).setCancelable(true);
                AlertDialog alert = add.create();
                alert.setTitle("Error!!!");
                alert.show();
            }
        });
        Controller.getInstance(this).addToRequestQueue(jsonreq);


    }
}

1 Answers1

0

I guess your ContactDetail activity is getting the list again. And why do you need to show a listview again if you only need one item upon clicking of one item in your first activity.

Anyway, if you still want to use listview in your ContactDetail then do this..

in your listview.setOnItemClickListener on MainActivity

Intent intent = new Intent(MainActivity.this, ContactDetail.this);
intent.putExtra("contact", l.get(position));
startActivity(intent);

in your ContactDetails activity, replace it with this.. remove that JsonArrayRequest

listView = (ListView) findViewById(R.id.list2);
Contact contact =  getIntent().getSerializableExtra("contact");
l.add(contact);
adapter = new ListViewContactAdapter(this, l);
listView.setAdapter(adapter);

and also make sure that your Contact object implements Serializable

Sakura Fukuyoshi
  • 1,461
  • 1
  • 10
  • 14