【问题标题】:ERROR get item in ListView when OnClick itemOnClick 项目时在 ListView 中获取项目时出错
【发布时间】:2017-10-23 13:53:42
【问题描述】:

我的名字 ari.. 我是 Android 开发的新手。也许你可以帮我回答我的问题。我想显示来自 listview 适配器的数据,但是当我单击数据时。我的应用程序强制关闭。

我有一个适配器,用于在列表视图中显示数据,例如:

ListAdapter.java

package com.santosa.sapasantosa.components;

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 com.santosa.sapasantosa.R;

import java.util.ArrayList;

/**
 * Created by muhammadaa on 10/14/2017.
 */

public class ListAdapter extends BaseAdapter {

private Activity activity;
private static ArrayList nik;
private static ArrayList nama;
private static ArrayList email;
private static ArrayList phone;
private static ArrayList jabatan;
private static ArrayList departement;
private static ArrayList gender;
private static ArrayList status;
private static ArrayList label;
private static LayoutInflater inflater = null;


public ListAdapter(Activity a, ArrayList b, ArrayList c, ArrayList d, ArrayList e, ArrayList f, ArrayList g, ArrayList h, ArrayList i, ArrayList j) {
    activity = a;
    this.nik = b;
    this.nama = c;
    this.email = d;
    this.gender = e;
    this.status = f;
    this.label = g;
    this.phone = h;
    this.jabatan = i;
    this.departement = j;

    inflater = (LayoutInflater) activity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

public int getCount() {
    return nik.size();
}

public Object getItem(int position) {
    return position;
}

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

public View getView(int position, View convertView, ViewGroup parent) {
    View vi = convertView;

    if (convertView == null)
        vi = inflater.inflate(R.layout.listview_data_profile, null);


        TextView nik2 = (TextView) vi.findViewById(R.id.profNik); // nik
        String ambilNik = nik.get(position).toString();
        nik2.setText(ambilNik);


        TextView nama2 = (TextView) vi.findViewById(R.id.profNama); // nama
        String ambilNama = nama.get(position).toString();
        nama2.setText(ambilNama);

        TextView email2 = (TextView) vi.findViewById(R.id.profEmail); // email
        String ambilEmail = email.get(position).toString();
        email2.setText(ambilEmail);

        TextView phone2 = (TextView) vi.findViewById(R.id.profPhone); // phone
        String ambilPhone = phone.get(position).toString();
        phone2.setText(ambilPhone);

        TextView gender2 = (TextView) vi.findViewById(R.id.profGender); // gender
        String ambilGender = gender.get(position).toString();
        gender2.setText(ambilGender);

        TextView bagian = (TextView) vi.findViewById(R.id.profBagian); // Bagian
        String ambilJabatan = jabatan.get(position).toString();
        String ambilDepartement = departement.get(position).toString();
        bagian.setText(ambilJabatan+"/"+ambilDepartement);

        TextView status2 = (TextView) vi.findViewById(R.id.profStatus); // status
        String ambilStatus = status.get(position).toString();
        status2.setText(ambilStatus);

        TextView label2 = (TextView) vi.findViewById(R.id.countNumber); // label
        String ambilLabel = label.get(position).toString();
        label2.setText(ambilLabel);


    return vi;

}

}

以及使用适配器的这个类片段

AdminHomeFragment

package com.santosa.sapasantosa.view.admin;


import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.annotation.StringDef;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import com.santosa.sapasantosa.R;
import com.santosa.sapasantosa.components.ListAdapter;
import com.santosa.sapasantosa.components.RequestHandler;
import com.santosa.sapasantosa.components.SharedPrefManager;
import com.santosa.sapasantosa.configs.Constrant;
import com.santosa.sapasantosa.models.Employee;

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

import java.util.ArrayList;
import java.util.HashMap;

import static android.provider.AlarmClock.EXTRA_MESSAGE;


/**
 * A simple {@link Fragment} subclass.
 */
 public class AdminHomeFragment extends Fragment {

ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();

ArrayList<String> nik_array = new ArrayList<String>();
ArrayList<String> nama_array = new ArrayList<String>();
ArrayList<String> email_array = new ArrayList<String>();
ArrayList<String> phone_array = new ArrayList<String>();
ArrayList<String> gender_array = new ArrayList<String>();
ArrayList<String> jabatan_array = new ArrayList<String>();
ArrayList<String> departement_array = new ArrayList<String>();
ArrayList<String> status_array = new ArrayList<String>();
ArrayList<Integer> label_array = new ArrayList<>();
com.santosa.sapasantosa.components.ListAdapter adapter;


ListView listPeg;


public AdminHomeFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_admin_home, container, false);

    listPeg = (ListView) view.findViewById(R.id.pegListView);
    listPeg.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent i = new Intent(getActivity(),ProfileEmployeeActivity.class);

            HashMap<String,String> map = (HashMap) parent.getItemAtPosition(position);
            Log.e("","adad "+map);
            String empId = map.get("nik");


            i.putExtra("nik",empId);


            startActivity(i);
        }
    });

    loadDataPegawai();

    return view;
}



private void loadDataPegawai() {

    // get parameter
    final String users = SharedPrefManager.getInstance(getContext()).getUserEmployee().getNik();

    class LoadPegawai extends AsyncTask<Void, Void, String> {

        @Override
        protected String doInBackground(Void... voids) {
            //creating request handler object
            RequestHandler requestHandler = new RequestHandler();

            //creating request parameters
            HashMap<String, String> params = new HashMap<>();
            params.put("username", users);

            //returing the response
            return requestHandler.sendPostRequest(Constrant.URL_PROFIL, params);
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);


            int n = 1;

            try {
                JSONObject obj = new JSONObject(s);


                if (!obj.getBoolean("error")) {
                    // get data user dari respone
                    JSONArray userJson = obj.getJSONArray("user");

                    for (int i = 0, count = userJson.length(); i < count; i++) {
                        try {
                            JSONObject jsonObject = userJson.getJSONObject(i);
                            if (jsonObject.getString("employeeStatus").toString().equals("0")) {
                                nik_array.add(jsonObject.getString("employeeID").toString());
                                nama_array.add(jsonObject.getString("employeeNama").toString());
                                email_array.add(jsonObject.getString("employeeEmail").toString());
                                gender_array.add(jsonObject.getString("employeeGender").toString());
                                status_array.add(jsonObject.getString("employeeStatus").toString());
                                phone_array.add(jsonObject.getString("employeePhone").toString());
                                jabatan_array.add(jsonObject.getString("employeeJabatan").toString());
                                departement_array.add(jsonObject.getString("employeeDepartement").toString());
                                label_array.add(n++);


                                String id = jsonObject.getString("employeeID").toString();
                                // adding to hashmap
                                HashMap<String,String> employees = new HashMap<>();
                                employees.put("nik",id);
                                list.add(employees);
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }

                    /* Set data to listview */
                    adapter = new com.santosa.sapasantosa.components.ListAdapter( getActivity(),
                            nik_array,
                            nama_array,
                            email_array,
                            gender_array,
                            status_array,
                            label_array,
                            phone_array,
                            jabatan_array,
                            departement_array);

                    listPeg.setAdapter(adapter);
                    listPeg.setTextFilterEnabled(true);


                }

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
    //executing the async task
    LoadPegawai ru = new LoadPegawai();
    ru.execute();
}

}

当我在 ListView 中单击数据适配器时,出现如下错误:

你能帮我解决这个错误吗?我说非常非常感谢您的帮助...

【问题讨论】:

  • 您正在为getItem(int position) 返回一个整数,而整数不是哈希图
  • parent.getItemAtPosition(position) 返回 int 值,您正在尝试在 HashMap 中进行类型转换
  • 错误信息告诉你一切,你试图将整数转换为 HashMap,这在逻辑上是错误的。
  • 我该怎么办@RRTW?

标签: android listview onclick


【解决方案1】:

似乎您正在尝试将所有员工显示为 ListView...如果我的理解没有错,您应该:

  • 创建一个 EmployeeBean
  • 将所有员工放入一个集合...也许是 ArrayList。

之后,当你点击ListView上的一个item时,你得到的整数就是你collection中EmployeeBean的index,这样你就可以从你的collection中访问它了。

【讨论】:

  • 是的,我尝试在 ListView 中显示所有员工。但当我想显示一名员工时。我有这样的错误。你能帮我解决我的代码吗?
  • 当你点击ListView的一个item时,你会得到一个索引。您应该通过单击获得的索引从您的集合中获取真实数据。您所有的真实数据都在该集合中,而不是在 ListView 中。
猜你喜欢
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多