0
我已經學會了如何在部分創建一個自定義列表項,並添加一個可點擊的ImageButton吧,感謝這個答案:超過一個活動使用自定義ListItemAdapter(與刪除按鈕)
how to use onClickListener method of Button on a ListView
但是,我有兩個單獨的活動,其中包含用戶可能想要刪除數據的ArrayList。是否有可能將代碼添加到每個這些活動中,以檢測特定ListItem的「刪除」按鈕何時被按下,或者是否必須在ListItemAdapter中定義該方法並嘗試找到一種方法來檢測當前正在運行哪個活動? (到目前爲止,我的應用程序不需要任何特殊權限,但我敢肯定,這將在以後的版本改變)
僅供參考,這裏的代碼,我ListItem.java:
package net.player1diary.pocketscribe;
// custom class to be used for an advanced List Item display
public class ListItem {
private int listIcon; // resource ID of the icon
private String listText; // the text
private String listDetail; // details about the list item (optional)
private boolean deleteEnabled; // whether or not the list item contains a "delete" button
// constructors
public ListItem() {};
public ListItem(int resource, String t, String d, boolean del) {
this.listIcon = resource;
this.listText = t;
this.listDetail = d;
this.deleteEnabled = del;
}
// functions for displaying variables
public int getListIcon() {
return this.listIcon;
}
public String getListText() {
return this.listText;
}
public String getListDetail() {
return this.listDetail;
}
public boolean getDeleteListItemEnabled() {
return this.deleteEnabled;
}
// functions for altering variables
public void setListIcon(int newIcon) {
this.listIcon = newIcon;
}
public void setListText(String newText) {
this.listText = newText;
}
public void setListDetail(String newDetail) {
this.listDetail = newDetail;
}
public void setDeleteListItemEnabled(boolean newStatus) {
this.deleteEnabled = newStatus;
}
}
和代碼ListItemAdapter.java:
package net.player1diary.pocketscribe;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
// custom advanced List Adapter
public class ListItemAdapter extends ArrayAdapter<ListItem> {
private List<ListItem> objects;
public ListItemAdapter(Context context, List<ListItem> objects) {
super(context, R.layout.list_item, objects);
this.objects = objects;
}
// show the customized list items
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi;
vi = LayoutInflater.from(getContext());
v = vi.inflate(R.layout.list_item, null);
}
ListItem p = objects.get(position);
// display each list item
if (p != null) {
ImageView img = (ImageView) v.findViewById(R.id.imgListIcon);
final TextView text = (TextView) v.findViewById(R.id.txtListText);
final TextView detail = (TextView) v.findViewById(R.id.txtListDetail);
ImageButton deleteButton = (ImageButton) v.findViewById(R.id.btnListDeleteItem);
// prepare the delete button, if it exists
deleteButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO take action, depending on context
Toast.makeText(getContext(), "Are you sure you want to delete " + text.getText().toString() + "?", Toast.LENGTH_SHORT).show();
}
});
if (img != null) {
img.setImageResource(p.getListIcon());
}
if (text != null) {
text.setText(p.getListText());
}
if (detail != null) {
detail.setText(p.getListDetail());
}
// hide the detail from view if there is no text there
if (detail.getText().length() == 0) {
detail.setVisibility(View.INVISIBLE);
}
// hide the delete button from view if it is disabled
if (!p.getDeleteListItemEnabled()) {
deleteButton.setVisibility(View.GONE);
}
}
return v;
}
}
最後,佈局list_item.xml:
<?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" >
<ImageView
android:id="@+id/imgListIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:contentDescription="@string/icon"
android:maxHeight="@dimen/list_icon"
android:maxWidth="@dimen/list_icon"
android:minHeight="32dp"
android:minWidth="32dp"
android:src="@drawable/ic_book" />
<TextView
android:id="@+id/txtListDetail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/txtListText"
android:layout_below="@+id/txtListText"
android:hint="@string/list_item_detail"
android:textColor="@color/list_detail"
android:textIsSelectable="false" />
<TextView
android:id="@+id/txtListText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/imgListIcon"
android:ellipsize="end"
android:hint="@string/list_item"
android:textColor="@color/list_text"
android:textIsSelectable="false"
android:textSize="@dimen/list_item"
android:textStyle="bold" />
<ImageButton
android:id="@+id/btnListDeleteItem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:src="@drawable/ic_delete" android:contentDescription="@string/delete"/>
</RelativeLayout>
好吧,我想我明白了。我不是在ListItemAdapter類中定義delete方法,而是在我想要使用delete方法的活動中執行此操作,並從我的佈局中定義的「onClick」方法調用它,對吧? – willyfoureyes