2013-07-05 34 views
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> 

回答

0

硅如果你的兩個活動都有自己的適配器實例(我認爲),你可以創建一個接口,當點擊刪除時通過該位置。活動實施該界面並處理arraylist的正確刪除。這樣,當點擊列表項刪除時,正確的活動get被調用。

+0

好吧,我想我明白了。我不是在ListItemAdapter類中定義delete方法,而是在我想要使用delete方法的活動中執行此操作,並從我的佈局中定義的「onClick」方法調用它,對吧? – willyfoureyes

相關問題