有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从ClickListener上的listview获取id值

我想从listview获取id,而不是位置。id在JSON文件中,所以当我在listview中显示数据时,当我单击它时,我从JSON文件中获取该驱动程序的id

[{lastName=wdkj fsj, firstName=jf jfn, id=1}, {lastName=singh, firstName=sunny, id=2}]

public class DriverData extends AppCompatActivity {
    private String TAG = DriverData.class.getSimpleName();

    ArrayAdapter<String> adapter;
    private ProgressDialog pDialog;
    private ListView lv;


    // URL to get contacts JSON
    private static String url = "http://54.148.120.200:3000/getDrivers";

    ArrayList<HashMap<String, String>> contactList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.driver_data);

        contactList = new ArrayList<>();
        lv = (ListView) findViewById(R.id.simpleListView);


        new DriverData.GetContacts().execute();


    }

    /**
     * Async task class to get json by making HTTP call
     */
    private class GetContacts extends AsyncTask<Void, Void, Void> {

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

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            HttpHandler sh = new HttpHandler();

            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(url);

            Log.e(TAG, "Response from url: " + jsonStr);

            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);

                    // Getting JSON Array node
                    JSONArray contacts = jsonObj.getJSONArray("drivers");

                    // looping through All Contacts
                    for (int i = 0; i < contacts.length(); i++) {
                        JSONObject c = contacts.getJSONObject(i);

                        String id = c.getString("id");
                        JSONObject user = c.getJSONObject("user");
                        String firstName = user.getString("firstName");
                        String lastName = user.getString("lastName");


                        // Phone node is JSON Object


                        // tmp hash map for single contact
                        HashMap<String, String> contact = new HashMap<>();

                        // adding each child node to HashMap key => value
                        contact.put("id", id);
                        contact.put("firstName", firstName);
                        contact.put("lastName", lastName);

                        // adding contact to contact list
                        contactList.add(contact);


                    }
                } catch (final JSONException e) {
                    Log.e(TAG, "Json parsing error: " + e.getMessage());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "Json parsing error: " + e.getMessage(),
                                    Toast.LENGTH_LONG)
                                    .show();
                        }
                    });

                }
            } else {
                Log.e(TAG, "Couldn't get json from server.");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Couldn't get json from server. Check LogCat for possible errors!",
                                Toast.LENGTH_LONG)
                                .show();
                    }
                });

            }
            System.out.println(contactList);
            return null;
        }

        @Override
        protected 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(
                    DriverData.this, contactList,
                    R.layout.list_item, new String[]{"firstName", "lastName"
            }, new int[]{R.id.name, R.id.lastName});
            lv.setAdapter(adapter);

            lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {

                }
            });

        }
    }
}

共 (2) 个答案

  1. # 1 楼答案

    您在联系人列表中有它,您可以简单地检索它

    在setOnItemClickListener()中执行此操作

     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                String id=contactList.get(position).get("id");
                }
            });
    
  2. # 2 楼答案

    首先,创建POJO模型以保存对象并轻松使用它们

    public class Contact {
    
        private String id;
        private String lastName;
        private String firstName;
    
        public Contact(String id, String lastName, String firstName) {
            this.id = id;
            this.lastName = lastName;
            this.firstName = firstName;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getLastName() {
            return lastName;
        }
    
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
    
        public String getFirstName() {
            return firstName;
        }
    
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
    }
    

    这只是一个POJO模型类,但是如果您想获得更多关于它的信息,您可以按照下面的link

    注意:变量应该是private,方法应该是public

    然后,最好创建自己的自定义适配器

    public class ListAdapter extends ArrayAdapter<Item> {
    
        private List<Contact> contactList;
    
        public ListAdapter(Context context, int textViewResourceId) {
            super(context, textViewResourceId);
        }
    
        public ListAdapter(Context context, int resource, List<Contact> contactList) {
            super(context, resource, contactList);
            this.contactList = contactList;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
            View v = convertView;
    
            if (v == null) {
                LayoutInflater vi;
                vi = LayoutInflater.from(getContext());
                v = vi.inflate(R.layout.itemlistrow, null);
            }
    
            Item p = getItem(position);
    
            if (p != null) {
                TextView tvId = (TextView) v.findViewById(R.id.id);
                TextView tvLastName = (TextView) v.findViewById(R.id.lastName);
                TextView tvFirstName = (TextView) v.findViewById(R.id.firstName);
    
                tvId.setText(contactList.getId()); // this will show ID
                tvLastName.setText(contactList.getLastName()); 
                tvFirstName.setText(contactList.getFirstName());
    
            }
    
            return v;
        }
    
    }
    

    然后,从JSON链接获取所有数据后,将数据发送给构造函数。 我将更新您的来源:

          try {
                    contactList = new ArrayList<Contact>;
                    JSONObject jsonObj = new JSONObject(jsonStr);
    
                    // Getting JSON Array node
                    JSONArray contacts = jsonObj.getJSONArray("drivers");
    
                    // looping through All Contacts
                    for (int i = 0; i < contacts.length(); i++) {
                        Contact contact = new Contact();
    
                        JSONObject c = contacts.getJSONObject(i);
    
    
                        JSONObject user = c.getJSONObject("user");
                        contact.setId(c.getString("id"));
                        contact.setFirstName(user.getString("firstName"));
                        contact.setLastName(user.getString("lastName"));
    
                        contactList.add(contact);
    
    
                    }
                }
    

    同时更新onPostExecute()方法

    @Override
            protected void onPostExecute(Void result) {
                super.onPostExecute(result);
    
                // Dismiss the progress dialog
                if (pDialog.isShowing())
                    pDialog.dismiss();
    
    
                //System.out.println(contactList.size());
    
                /**
                 * Updating parsed JSON data into ListView
                 * */
    
                ListAdapter adapter = new ListAdapter(
                        getApplicationContext(), R.layout.list_item, contactList);
                lv.setAdapter(adapter);
            } 
    

    如果您有任何错误,请在此处进行评论,我将更新。尚未测试,但我认为这将有帮助。享受吧