Я создал индивидуальный ListView
. ListView
содержит информацию о каждом объекте и 2 кнопках для редактирования и удаления. Я связал его с объектом ArrayList
с помощью настраиваемого ListViewAdapter
для информации.Обработка событий Click List в ListView
Теперь я хочу, чтобы кнопки обновляли объект ArrayList
при нажатии. Я не могу найти способ сделать это. Я следовал инструкции нашел в этой ссылке ..
http://www.migapro.com/click-events-listview-gridview/
Программа не бросать какие-либо ошибки. Но он ничего не делает. Пока что я просто хотел протестировать, бросив тост за каждую кнопку.
Код для метода ListViewAdapter.getView()
является:
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
ViewHolder holder;
// check if the view already exists
// if so, no need to inflate and findViewById again!
if (convertView == null) {
// Inflate the custom row layout from your XML.
convertView = mInflater.inflate(R.layout.list_item, null);
// create a new "Holder" with subviews
holder = new ViewHolder();
holder.itemNameView = (TextView) convertView.findViewById(R.id.item_name);
holder.itemExpiryView = (TextView) convertView.findViewById(R.id.item_expiry);
// Taking care of the buttons
holder.editButton = (Button) convertView.findViewById(R.id.button_edit);
holder.editButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((ListView) parent).performItemClick(v, position, 0); // Let the event be handled in onItemClick()
}
});
holder.deleteButton = (Button) convertView.findViewById(R.id.button_delete);
holder.deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((ListView) parent).performItemClick(v, position, 0); // Let the event be handled in onItemClick()
}
});
// hang onto this holder for future recycling
convertView.setTag(holder);
} else {
// skip all the expensive inflation/findViewById
// and just get the holder you already made
holder = (ViewHolder) convertView.getTag();
}
// More code after this
// Grab the title and author from the JSON
String name = "";
String expiry = "7 days";
// Write appropriate codes to obtain values for the string variables above
name = (String) getItem(position);
// Send these Strings to the TextViews for display
holder.itemNameView.setText(name);
holder.itemExpiryView.setText(expiry);
return convertView;
}
Я реализовал OnItemClickListener() в MainActivity и написал этот код-фрагмент для обработки щелчков кнопок.
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
long viewId = view.getId();
if (viewId == R.id.button_edit) {
Toast.makeText(this, "Edit Button CLicked", Toast.LENGTH_SHORT).show();
} else if (viewId == R.id.button_delete) {
Toast.makeText(this, "Delete Button CLicked", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "ListView clicked" + id, Toast.LENGTH_SHORT).show();
}
}
Соответствующий файл макета выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<TextView
android:id="@+id/item_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/item_expiry"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/item_name" />
<Button
android:id="@+id/button_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/item_expiry"
android:layout_alignParentLeft="true"
android:text="Edit"
android:clickable="true" />
<!--android:onClick="editItem" />-->
<Button
android:id="@+id/button_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/item_expiry"
android:layout_alignParentRight="true"
android:text="Delete"
android:clickable="true" />
<!--android:onClick="ItemEdits.deleteItem" />-->
</RelativeLayout>
Если вы, ребята, нужно больше кодовыми фрагменты, пожалуйста, дайте мне знать. Не удалось найти что-либо в logcat. Таким образом, не может помочь с кодом ошибки/предупреждением. Заранее большое спасибо.
Что я пытаюсь достичь здесь, так это то, что, когда я нажимаю кнопку «Редактировать/Удалить», мне нужно вызвать функцию, чтобы изменить ArrayList, сохраняя значения списка. И каким-то образом мне нужно передать позицию элемента, нажатого, чтобы я мог обновить правильную информацию. Есть ли лучший способ сделать это? Если да, то, пожалуйста, помогите мне с образцом кода.
Спасибо, что указал. Изменено соответственно. И да, сохраняя проблемы как OnClick, так и OnItemClick. Я попытался бы определить функции для редактирования и удаления внутри методов OnClick, а не передавать его в новую функцию OnItemClick. :) Спасибо за указание. Я могу обновить эту тему, прося дополнительную помощь. Приятно познакомиться. – Reutzesen