当前位置: 首页 > 知识库问答 >
问题:

自定义列表视图中Imageview处出现空指针异常

百里秋月
2023-03-14

我有一个自定义列表视图,其中有一个文本视图和三个图像视图。单击图像视图,我想开始一个新的活动,并将特定位置的数据传递给下一个活动。但我得到了空指针异常。

我用这个做参考http://jmsliu.com/2444/click-button-in-listview-and-get-item-position.html

这是我的密码。这是主要活动

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_employees);
    toolbar = (Toolbar) findViewById(R.id.app_bar);
    toolbar.setTitle("Manage Employees");
    nPregress = (ProgressBar) findViewById(R.id.toolbar_progress_bar);
    nPregress.setVisibility(View.GONE);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    mainList = (ListView) findViewById(R.id.manageemployeeList);

    employee1 = new ArrayList<Pojo>();
    tii = new ArrayList<String>();

    SharedPreferences prefs = getSharedPreferences("MyPref4", MODE_PRIVATE);
    Set<String> set1 = prefs.getStringSet("employeename", null);

    if (set1 != null ) {
        List<String> nameList = new ArrayList<String>(0);
        nameList.addAll(set1);


        for (int i = 0; i < set1.size(); i++) {
            pojo = new Pojo();
            pojo.setMgEmpName(nameList.get(i));
            employee1.add(pojo);
            Log.e("namemmee0", "" + nameList.get(i));
        }
        mainAdapter = new EmployeesAdapter(EmployeesActivity.this, employee1);
        mainList.setAdapter(mainAdapter);
    } else {
        new NetCheck().execute();
    }
    new NetCheck().execute();

    emp_edit = (ImageView) findViewById(R.id.imgedit);
    emp_edit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            View parentRow = (View) v.getParent();
            mainList = (ListView) parentRow.getParent();
            final int position = mainList.getPositionForView(parentRow);

            String emp_name = employee1.get(position).getMgEmpName().toString();

            Intent i = new Intent(EmployeesActivity.this, EditEmployee.class);
            i.putExtra("empname", emp_name);
            startActivity(i);
        }
    });


}

我在这一行遇到了例外

  emp_edit.setOnClickListener(new View.OnClickListener()

我该怎么做?请帮帮我。

这是我的适配器。我也尝试过adpter中的onClickListener,但我没有在下一个活动中生成正确的数据。。即使选择了不同的列表视图项,也会得到相同的值

  public class EmployeesAdapter extends BaseAdapter {
TextView categoryName;
Pojo pojo;
private Context activity1;
ArrayList<Pojo> data1;
private ArrayList<Pojo> arraylist1 = null;
public static LayoutInflater inflater;

ImageView编辑、删除、历史记录;字符串del_empid;

public EmployeesAdapter(Context ctx, ArrayList<Pojo> employee1) {
    // TODO Auto-generated constructor stub
    activity1 = ctx;
    data1 = employee1;
    inflater = (LayoutInflater) activity1
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.arraylist1 = new ArrayList<Pojo>();
    this.arraylist1.addAll(data1);
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return data1.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return data1.get(position);
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    View v = convertView;

    v = inflater.inflate(R.layout.manage_emp_list, parent, false);

    pojo = data1.get(position);

    categoryName = (TextView) v.findViewById(R.id.employeeName);
    categoryName.setText(pojo.getMgEmpName());
    edit = (ImageView) v.findViewById(R.id.imgedit);
    delete = (ImageView) v.findViewById(R.id.imgdelete);
    historyy = (ImageView) v.findViewById(R.id.imgHistory);
    edit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(activity1, EditEmployee.class);
            intent.putExtra("empname", "" + pojo.getMgEmpName());
            intent.putExtra("empmobile", "" + pojo.getMgEmpContact());
            intent.putExtra("empemail", "" + pojo.getMgEmpEmail());
            intent.putExtra("empappcost", "" + pojo.getMgEmpAppCost());

            activity1.startActivity(intent);
        }
    });

    delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            del_empid = pojo.getMgEmp_id();
            new NetCheck().execute();
        }
    });

    historyy.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(activity1, MainActivity.class);
            activity1.startActivity(intent);
        }
    });
    return v;

}

管理自定义列表视图的\u emp\u列表

<?xml version="1.0" encoding="utf-8"?>


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="New Text"
    android:id="@+id/employeeName"
    android:textColor="#000000"
    android:textSize="18dp"
    android:padding="5dp"
    android:layout_marginLeft="5dp"/>

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imgdelete"
    android:src="@drawable/delete32"
    android:layout_marginRight="12dp"
    android:layout_marginEnd="12dp"
    android:layout_alignBottom="@+id/employeeName"
    android:layout_toLeftOf="@+id/imgedit"
    android:layout_toStartOf="@+id/imgedit"
    android:clickable="true"
    android:onClick="delete_empoyee"/>

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imgedit"
    android:layout_marginRight="15dp"
    android:layout_marginEnd="15dp"
    android:src="@drawable/edit32"
    android:layout_alignTop="@+id/imgdelete"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:clickable="true"
   />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imgHistory"
    android:src="@drawable/history32"
    android:clickable="true"
    android:onClick="employee_history"
    android:layout_alignParentTop="true"
    android:layout_toLeftOf="@+id/imgdelete"
    android:layout_toStartOf="@+id/imgdelete"
   />

共有2个答案

裴鸿熙
2023-03-14

您的getView()方法在适配器中应如下所示:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    pojo = data1.get(position);
    ViewHolder holder;

    if (pojo != null) {
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.manage_emp_list, parent, false);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.categoryName.setText(pojo.getMgEmpName());

        //holder.edit.setOnClickListener()...

        //holder.delete.setOnclickListener()...


    }
    return convertView;
}

添加一个静态类到适配器中:

   static class ViewHolder {

    TextView categoryName;
    ImageView edit;
    ImageView delete;
    ImageView historyy;

    public ViewHolder(View view) {

        categoryName = (TextView) v.findViewById(R.id.employeeName);
        edit = (ImageView) v.findViewById(R.id.imgedit);
        delete = (ImageView) v.findViewById(R.id.imgdelete);
        historyy = (ImageView) v.findViewById(R.id.imgHistory);
    }
}
南宫云
2023-03-14

尝试此操作,在本地存储时可能会出现位置不匹配

edit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(activity1, EditEmployee.class);
        intent.putExtra("empname", "" + data1.get(position).getMgEmpName());
        intent.putExtra("empmobile", "" + data1.get(position).getMgEmpContact());
        intent.putExtra("empemail", "" + data1.get(position).getMgEmpEmail());
        intent.putExtra("empappcost", "" + data1.get(position).getMgEmpAppCost());

        activity1.startActivity(intent);
    }
});
 类似资料:
  • 所以我正在创建一个列表视图,其中每一行都有一个Imageview(用于预览图像)、一个textView和一个按钮(用于删除图像)。 问题: 单击该项目的 但有时代码工作正常,有时只是显示错误的项目编号。 更新: 我忘了补充,文本视图中显示的值是:“标志:#”其中#是该项目的当前计数号。我不能理解的总是正确的,但不是我得到的祝酒词: s 背景工作: 页面顶部有一个按钮,用户可以通过该按钮单击照片,当

  • 我遵循本教程并应用一些更改,并在中获得了。 我在gridview中也遇到了这个错误 我初始化了回收视图,这段代码有什么问题? 自定义日历视图。xml 自定义日历视图。Java语言 CostumCalendarAdapter。Java语言 日历活动。Java语言 活动日历。xml 错误LogCat: 12-03 03:56:55.184 6750-6750/com。实例艾莎。todocln E/An

  • 我和我的朋友正在开发一个JavaFX应用程序,它充当我们学校的规划器。我们有任务(课堂作业)、事件、课程和学生信息。为了将数据持久地存储在用户的硬盘上,我们使用了JAXB。 我们已经注释了我们的类,并且可以成功地在包装器中整理任务类。问题是解组文件。 > 混淆名称和注释。命名似乎不是问题所在。 确定文件位置以确保其正确。 确定知道的类。它同时识别和类。 sysouting。它在内存中显示了一个有效

  • 以下是在sun.reflect.nativeMethodAccessorImpl.Invoke0(本机方法)在sun.reflect.nativeMethodAccessorImpl.Invoke(未知源)在sun.reflect.NativeMethodAccessorImpl.Invoke(未知源)在java.lang.Reflect.Method.Invoke(未知源)在com.codena

  • 问题内容: 我正在android中做一个应用程序,因此我需要访问com.android.internal.telephony API。现在,我可以访问这些API了,但问题是,无论我在自己的类中调用Class Call.java方法的什么地方,都会抛出。您可以在http://hi- android.info/src/com/android/internal/telephony/Call.java.h

  • 我正在创建一个包含教授字段的表单,这个字段是id(长)、nome(字符串)、username(字符串)、email(字符串)和curso_coord(curso),因为curso是一个类课程的引用变量。 我尝试了curso.get(0).getid()来解决这个问题,但这是不够的 2019-10-04 15:37:00.700错误17580---[nio-8081-exec-1]C.P.P.Con