Was mein Code tut ist hinzufügen, löschen und bearbeiten Operationen.Nach Klicken auf Hinzufügen Schaltfläche wird der Name hinzugefügt, um die Liste und beim Löschen der bestimmten Zeile wird gelöscht.Auf ähnliche Weise, beim Klicken auf Bearbeiten Schaltfläche wird ein Dialogfeld aufgefordert, in dem Der Bearbeitungsvorgang muss ausgeführt werden, und beim Klicken auf Speichern müssen die bearbeiteten Daten in dieser bestimmten Zeile aktualisiert werden.Wie speichern Sie die Änderungen an der Zeile in der Listenansicht?
Problem, das ich konfrontiert ist, ist beim Klicken auf Speichern Schaltfläche die App wird abgestürzt.
MainActivity.java
public class MainActivity extends AppCompatActivity
{
ListView userList;
UserCustomAdapter userAdapter;
Button addButton;
ArrayList<User> userArray = new ArrayList<User>();
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* add item in arraylist
*/
userArray.add(new User("a"));
userArray.add(new User("b"));
userArray.add(new User("c"));
userArray.add(new User("d"));
userArray.add(new User("e"));
userArray.add(new User("f"));
userArray.add(new User("g"));
final Button addButton = (Button)findViewById(R.id.add_button);
editText = (EditText) findViewById(R.id.edit_data);
/**
* set item into adapter
*/
userAdapter = new UserCustomAdapter(MainActivity.this, R.layout.list_view_layout,
userArray);
userList = (ListView) findViewById(R.id.listView);
userList.setItemsCanFocus(false);
userList.setAdapter(userAdapter);
/**
* on click of add button(add data to arraylist)
*/
addButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
userArray.add(new User(editText.getText().toString()));
userAdapter.notifyDataSetChanged();
}
});
/**
* get on item click listener
*/
userList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v,
final int position, long id) {
Toast.makeText(MainActivity.this,
"Name Clicked:" +position, Toast.LENGTH_LONG)
.show();
}
});}}
UserCustomAdapter.java
public class UserCustomAdapter extends ArrayAdapter<User> {
Context context;
int layoutResourceId;
UserCustomAdapter userAdapter;
ArrayList<User> data = new ArrayList<User>();
ArrayList<User> userArray = new ArrayList<User>();
public UserCustomAdapter(Context context, int layoutResourceId,
ArrayList<User> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row = convertView;
UserHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new UserHolder();
holder.addButton =(Button) row.findViewById(R.id.add_button);
holder.textName = (TextView) row.findViewById(R.id.textView_name);
holder.btnEdit = (Button) row.findViewById(R.id.button_edit);
holder.btnDelete = (Button) row.findViewById(R.id.button_delete);
row.setTag(holder);
} else {
holder = (UserHolder) row.getTag();
}
User user = data.get(position);
holder.textName.setText(user.getName());
/**
* prompt dialog on click of edit button
*/
holder.btnEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);
alertDialog.setTitle("EDIT NAME");
alertDialog.setMessage("Enter Name");
final EditText input = new EditText(context);
alertDialog.setView(input);
alertDialog.setPositiveButton("SAVE", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String srt = input.getEditableText().toString();
Toast.makeText(context,srt, Toast.LENGTH_LONG).show();
userAdapter.notifyDataSetChanged();
}
});
alertDialog.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.cancel();
}
});
AlertDialog alert = alertDialog.create();
alert.show();
}
});
/**
* Delete's a name from the list
*/
holder.btnDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i("Delete Button Clicked", "**********");
Toast.makeText(context, "Delete button Clicked",
Toast.LENGTH_LONG).show();
data.remove(position); //or some other task
notifyDataSetChanged();
}
});
return row;
}
static class UserHolder {
TextView textName;
Button btnEdit;
Button btnDelete;
Button addButton;}}
Fehler bei userAdapter.notifyDataSetChanged();
Bitte helfen Sie mir, Danke im Voraus.
Bitte senden Sie auch die LogCat ... – Hearty
Kann fügst du bitte den stacktrace hinzu? In welcher Zeile stürzt Ihre App ab? – FrenchFalcon
sollten Sie userAdapter.notifyDataSetChanged() aufrufen; in onResume Ihrer Aktivität. Wenn Sie notifyDataSetChanged im Warnungsdialog aufrufen, ist die aktuelle Aktivität nicht aktiv oder befindet sich im angehaltenen Zustand. – drulabs