Listview只显示一个项目,而不是全部列表

时间:2017-08-11 00:19:25

标签: android json listview jsonparser

这是我的填充列表视图适配器的代码

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;
    }




}

这是我的主要

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);

    }
}

}

此代码正常工作并填充我的列表视图,但是,当我点击列表视图中的项目时,我有另一个列表视图填充显示所有联系人项目...我只想要显示一个联系人项目。

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;


    }


} 

现在我在这里填充它。但为什么它显示为另一个列表listview?我只想要一件物品。

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 个答案:

答案 0 :(得分:0)

我猜您的ContactDetail活动正在重新获取列表。如果您在第一次活动中点击一个项目时只需要一个项目,为什么还需要再次显示列表视图。

无论如何,如果您仍想在ContactDetail中使用listview,请执行此操作..

在MainActivity上的listview.setOnItemClickListener中

Intent intent = new Intent(MainActivity.this, ContactDetail.this);
intent.putExtra("contact", l.get(position));
startActivity(intent);
在您的ContactDetails活动中

,将其替换为..删除该JsonArrayRequest

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

并确保您的Contact对象实现Serializable