Java 在android中如何将数据从列表适配器发送到活动?
我有一个自定义列表适配器,我想将此列表适配器中的值传递给设置适配器的活动。 这是我的适配器代码Java 在android中如何将数据从列表适配器发送到活动?,java,android,listadapter,Java,Android,Listadapter,我有一个自定义列表适配器,我想将此列表适配器中的值传递给设置适配器的活动。 这是我的适配器代码 public class RoleList extends ArrayAdapter<String> { private ArrayList<String> name; private ArrayList<String> username; private ArrayList<String> password; priv
public class RoleList extends ArrayAdapter<String>
{
private ArrayList<String> name;
private ArrayList<String> username;
private ArrayList<String> password;
private ArrayList<String> role;
private Activity context;
private MyActionCallback callback;
public RoleList(Activity context, ArrayList<String> name, ArrayList<String> username, ArrayList<String> password, ArrayList<String> role, MyActionCallback callback)
{
super(context, R.layout.role_list,name);
this.context = context;
this.name = name;
this.username =username;
this.password = password;
this.role = role;
this.callback = callback;
}
@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)
{
name.remove(position);
username.remove(position);
password.remove(position);
role.remove(position);
callback.onActionPerformed(position);
notifyDataSetChanged();
}
});
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(),android.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 MyActionCallback{
void onActionPerformed(int position);
}
}
公共类角色列表扩展了ArrayAdapter
{
私有ArrayList名称;
私有ArrayList用户名;
私有ArrayList密码;
私有ArrayList角色;
私人活动语境;
私有MyActionCallback;
公共角色列表(活动上下文、ArrayList名称、ArrayList用户名、ArrayList密码、ArrayList角色、MyActionCallback回调)
{
超级(上下文、右布局、角色列表、名称);
this.context=上下文;
this.name=名称;
this.username=用户名;
this.password=密码;
this.role=角色;
this.callback=回调;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图)
{
LayoutInflater充气器=上下文。getLayoutInflater();
最终视图列表视图项=充气机。充气(R.layout.role\u list,null,true);
最终文本视图文本视图名称=(文本视图)listViewItem.findViewById(R.id.tv_empname);
最终文本视图文本视图用户名=(文本视图)listViewItem.findViewById(R.id.tv_用户名);
final TextView textViewPass=(TextView)listViewItem.findViewById(R.id.tv\u密码);
final TextView textViewRole=(TextView)listViewItem.findViewById(R.id.tv_emprole);
按钮编辑=(按钮)listViewItem.findViewById(R.id.btn\u editRole);
按钮删除=(按钮)listViewItem.findViewById(R.id.btn_delRole);
delete.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v)
{
名称.删除(位置);
用户名。删除(位置);
密码。删除(位置);
角色。移除(位置);
callback.onActionPerformed(位置);
notifyDataSetChanged();
}
});
edit.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v)
{
Log.d(“Emp Info”,name.get(position)+username.get(position)+password.get(position)+role.get(position));
最终对话框=新建对话框(getContext());
setContentView(R.layout.userreg);
对话框.setTitle(“编辑员工”+姓名.get(职位)+“详细信息”);
最终字符串[]arraySpinner=新字符串[]{“经理”、“存货商”、“出纳”、“会计”};
对话框。可设置可取消(false);
对话框。setCanceledOnTouchOutside(false);
最终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.findviewbyd(R.id.Spinner_role);
final TextView textRole=(TextView)dialog.findViewById(R.id.tv\u selected\u role);
ArrayAdapter=新的ArrayAdapter(getContext(),android.R.layout.simple\u微调器\u项,arraySpinner);
emp_角色setAdapter(适配器);
emp_role.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
Toast.makeText(getContext(),“所选角色为”+arraySpinner[position],Toast.LENGTH\u SHORT).show();
字符串employee_role=arraySpinner[position];
textRole.setText(员工角色);
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
emp_name.setText(name.get(position));
emp_uname.setText(username.get(position));
emp_pw.setText(password.get(position));
emp_职位选举(职位);
Button buttoncancel=(Button)dialog.findViewById(R.id.buttoncancel);
buttoncancel.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
dialog.dismise();
}
});
Button buttonChange=(Button)dialog.findViewById(R.id.buttonRegister);
按钮更改设置文本(“更改”);
buttonChange.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v)
{
textViewName.setText(emp_name.getText().toString());
textViewusername.setText(emp_uname.getText().toString());
textViewPass.setText(emp_pw.getText().toString());
textViewRole.setText(textRole.getText());
dialog.dismise();
}
});
dialog.show();
}
});
textViewName.setText(name.get(position));
textViewusername.setText(username.get(position));
textViewPass.setText(password.get(position));
textViewRole.setText(role.get(position));
返回listViewItem;
}
公共接口MyActionCallback{
执行的无效操作(内部位置);
}
}
记录空指针异常
04-23 14:59:16.462 24919-24919/org.bordetuts.com.goldmine
E/AndroidRuntime:致命异常:main 04-23 14:59:16.462
24919-24919/org.bordetuts.com.goldmine E/AndroidRuntime:过程:
org.bordetuts.com.goldmine,PID:2491904-2314:59:16.462
24919-24919/org.bordetuts.com.goldmine E/AndroidRuntime:
java.lang.NullPointer
public class MainActivity extends AppCompatActivity implements YourCustomAdapter.MyActionCallback {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// or something like that
ListView listView = findViewById(R.id.my_list_view);
listView.setAdapter(new YourCustomAdapter(this));
}
@Override
public void onActionPerformed(int position) {
//do here something with your data
}
public class YourCustomAdapter extends BaseAdapter {
public YourCustomAdapter(
MyActionCallback actionCallback) {
mActionCallback = actionCallback;
}
private MyActionCallback mActionCallback;
@Override
public int getCount() {
return 0;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// your case specific code
// don't forget to implement view re-using properly,
// don't inflate view each time
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
name.remove(position);
username.remove(position);
password.remove(position);
role.remove(position);
//pass position of deleted object or any other thing you want
mActionCallback.onActionPerformed(position);
notifyDataSetChanged();
}
});
return null;
}
public interface MyActionCallback{
void onActionPerformed(int position);
}