有 Java 编程相关的问题?

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

java在安卓中从自定义列表适配器调用活动方法?

点击按钮时,我正试图使用谷歌的凌空库向我的php脚本发送一些数据。发送数据的方法在活动中,我已经编写了一个接口,从 自定义列表适配器

以下是我的适配器代码:

public class RoleList extends ArrayAdapter<String> {

    public static final String DELETEUSERINFO = VirtualMachineIp.VMIP_ADDRESS.trim() + "goldmine/getuserinfo.php";
    public static final String KEY_NAME = "name";
    public static final String KEY_ROLE = "role";
    private ArrayList<String> name;
    private ArrayList<String> username;
    private ArrayList<String> password;
    private ArrayList<String> role;
    private Activity context;

    public int getPos() {
        return pos;
    }

    public void setPos(int pos) {
        this.pos = pos;
    }

    int pos;

    public boolean isDelPressed() {
        return delPressed;
    }

    public void setDelPressed(boolean delPressed) {
        this.delPressed = delPressed;
    }

    boolean delPressed;

    private onDelCallback listener;

    public RoleList(Activity context, ArrayList<String> name, ArrayList<String> username, ArrayList<String> password, ArrayList<String> role, onDelCallback listener) {
        super(context, R.layout.role_list, name);
        this.context = context;
        this.name = name;
        this.username = username;
        this.password = password;
        this.role = role;
        this.listener = listener;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        final View listViewItem = inflater.inflate(R.layout.role_list, null, true);
        final TextView textViewName = (TextView) listViewItem.findViewById(R.id.tv_empname);
        final TextView textViewusername = (TextView) listViewItem.findViewById(R.id.tv_empusername);
        final TextView textViewPass = (TextView) listViewItem.findViewById(R.id.tv_emppassword);
        final TextView textViewRole = (TextView) listViewItem.findViewById(R.id.tv_emprole);
        Button edit = (Button) listViewItem.findViewById(R.id.btn_editRole);
        Button delete = (Button) listViewItem.findViewById(R.id.btn_delRole);


        delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                setDelPressed(true);
                name.remove(position);
                username.remove(position);
                password.remove(position);
                role.remove(position);
                listener.deleteuser(position);
                notifyDataSetChanged();
                setPos(position);

            }
        });
        edit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("Emp Info", name.get(position) + " " + username.get(position) + " " + password.get(position) + " " + role.get(position));

                final Dialog dialog = new Dialog(getContext());
                dialog.setContentView(R.layout.userreg);
                dialog.setTitle("Edit Employee " + name.get(position) + " details");
                final String[] arraySpinner = new String[]{"Manager", "Stockist", "Cashier", "Accountant"};
                dialog.setCancelable(false);
                dialog.setCanceledOnTouchOutside(false);
                final EditText emp_name = (EditText) dialog.findViewById(R.id.editTextName);
                final EditText emp_uname = (EditText) dialog.findViewById(R.id.editTextUserName);
                final EditText emp_pw = (EditText) dialog.findViewById(R.id.editTextPassword);
                final Spinner emp_role = (Spinner) dialog.findViewById(R.id.spinner_role);
                final TextView textRole = (TextView) dialog.findViewById(R.id.tv_selected_role);
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), 安卓.R.layout.simple_spinner_item, arraySpinner);
                emp_role.setAdapter(adapter);
                emp_role.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                        Toast.makeText(getContext(), "Role Selected is " + arraySpinner[position], Toast.LENGTH_SHORT).show();

                        String employee_role = arraySpinner[position];
                        textRole.setText(employee_role);

                    }

                    @Override
                    public void onNothingSelected(AdapterView<?> parent) {

                    }
                });


                emp_name.setText(name.get(position));
                emp_uname.setText(username.get(position));
                emp_pw.setText(password.get(position));
                emp_role.setSelection(position);

                Button buttoncancel = (Button) dialog.findViewById(R.id.buttonCancel);
                buttoncancel.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        dialog.dismiss();
                    }
                });

                Button buttonChange = (Button) dialog.findViewById(R.id.buttonRegister);
                buttonChange.setText("Change");
                buttonChange.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        textViewName.setText(emp_name.getText().toString());
                        textViewusername.setText(emp_uname.getText().toString());
                        textViewPass.setText(emp_pw.getText().toString());
                        textViewRole.setText(textRole.getText());
                        dialog.dismiss();

                    }
                });


                dialog.show();
            }
        });


        textViewName.setText(name.get(position));
        textViewusername.setText(username.get(position));
        textViewPass.setText(password.get(position));
        textViewRole.setText(role.get(position));

        return listViewItem;
    }

    public interface onDelCallback {
        void deleteuser(int pos);
    }



}

按下列表中的按钮时,理想情况下应调用以下代码:

@Override
    public void deleteuser(final int pos)
    {
        StringRequest stringRequest = new StringRequest(Request.Method.POST, DELETEUSERINFO, new Response.Listener<String>() {
            @Override
            public void onResponse(String response)
            {
                String resp = response.toString().trim();
                if (resp.equals("UNABLE TO DELETE USER"))
                {
                    Log.d("UNABLE TO DEL",resp);
                }else if (resp.equals("USER DELETED SUCCESSFULLY"))
                {
                    Toast.makeText(UserRegistration.this, "USER DELETED SUCCESSFULLY", Toast.LENGTH_SHORT).show();
                }

            }
        },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                        Toast.makeText(UserRegistration.this, "Please check your internet connection", Toast.LENGTH_LONG).show();
                    }
                }){

            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                params.put(KEY_NAME, employee_name.get(pos));
                params.put(KEY_ROLE,employee_role.get(pos));
                return params;
            }
        };
        RequestQueue rq = Volley.newRequestQueue(this);
        rq.add(stringRequest);
    }

我在parseUserinfo()中设置了适配器,它在getUserinfo()的响应上运行,我在onCreate().getUserinfo()中调用它,用于从远程服务器请求数据

以下是我设置适配器的方式:

 RoleList roleList = new RoleList(UserRegistration.this, employee_name, emp_username, emp_password, employee_role,UserRegistration.this);
 userList.setAdapter(roleList);

我想知道我是否在正确的位置调用了适配器。我需要再打一次吗

任何帮助或建议都将不胜感激。谢谢


共 (2) 个答案

  1. # 1 楼答案

    您可以像这样在适配器中执行活动的删除任务

    delete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    UserRegistration act = (UserRegistration) context;
                    act.deleteuser(position);
                }
            });
    
  2. # 2 楼答案

    您可以通过某些方式从适配器调用活动方法:

    1. 在创建适配器的构造函数时,可以在其参数中传递活动对象,然后在适配器中使用该对象

    2. 如果在适配器中创建接口,则必须在各自的活动中实现该接口,然后可以通过适配器构造函数传递活动对象,并使用所需的方法