2012-05-03 49 views
0

我想實現一個Listview在Android中,我可以啓用刪除模式,其中用戶可以選擇要刪除的條目。它應該類似於android中的消息應用程序。Android ListView選擇要刪除的項目與3列布局

我已經有一個ListActivity它有一個左側的圖標和右側的文字。我現在想添加一個漂浮在列表條目右側的CheckBoxListActivity在我的一個朋友的另一個問題中列出:android listactivity background color

佈局應該是:

  • 圖片
  • 中心列表項
  • 複選框進行刪除選擇

我怎樣才能做到這一點?在我可以使用的框架中是否有標準的ListView項目?

+0

我不明白你有什麼問題。您不知道如何設置刪除機制,或者問題出現在您的行佈局構建中? – Luksprog

+0

問題是,我無法正確設置佈局(xml)。我希望中間部分(消息標題和日期)具有動態寬度。左側是帶有48傾角的圖標,右側是複選框,也是固定的。每次im複選框添加到xml它不顯示。 – KeepAlive

回答

1

我猜你想要一個CheckBox出現(只)當是時候刪除從ListView項目。假設你從其他的問題,使用的佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="5dp" 
    android:background="@color/darkbluelogo" > 

    <ImageView android:id="@+id/list_image" 
     android:layout_width="48dip" 
     android:layout_height="48dip" 
     android:contentDescription="@id/list_image" 
     /> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="fill_parent" 
     android:padding="5dp" 
     android:background="@color/darkbluelogo" 
     android:scrollingCache="false" 
     android:cacheColorHint="#00000000" > 

     <TextView 
      android:id="@+id/title" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@+id/title" > 
     </TextView> 

     <TextView 
      android:id="@+id/datetime" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@+id/datetime" > 
     </TextView> 

    </LinearLayout> 
     <CheckBox 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:visibility="gone" /> 
</LinearLayout> 

ListView開始CheckBox將不存在,內容TextViews將佔據所有空間。在適配器的getView方法中添加一個標誌,該標誌將指示必須顯示CheckBox(此處您將設置CheckBox從佈局到可見的可見性)。當其刪除項目的時間修改標誌,然後致電notifyDataSetChanged(),以便ListView重新繪製其子項,此時CheckBox存在。

注意: 您必須自己保存CheckBoxes的狀態。

+0

非常感謝你,這似乎是做這項工作。這正是我想要的。 – KeepAlive

+0

@KeepAlive在'getView'方法中實現代碼時,請記住'ListView'會在您上下滾動時回收視圖。 – Luksprog

0

首先,您需要爲您的列表條目定製佈局。包含ImageView,TextView和CheckBox的簡單RelativeLayout應該就足夠了。

然後,您可能需要構建自己的可以擴展BaseAdapter(或SimpleAdapter或CursorAdapter或ArrayAdapter或...)的自定義適配器。適配器會將列表數據綁定到您的自定義佈局。例如,如果您的數據包含在一個光標它看起來像:

private class MyCustomAdapter extends CursorAdapter { 

     public MyCustomAdapter(Context context) { 
      super(context, null); 
     } 


     @Override 
     public View newView(Context context, Cursor cursor, ViewGroup parent) { 

      //Return a list item view 
      return getLayoutInflater().inflate(R.layout.my_custom_list_item_layout, parent, false); 

     } 

     @Override 
     public void bindView(View view, Context context, Cursor cursor) { 

      //Get views from layout 
      final ImageView imageView = (ImageView) view.findViewById(R.id.list_item_image); 
      final TextView textView = (TextView) view.findViewById(R.id.list_item_text); 
      final CheckBox checkBox = (CheckBox) view.findViewById(R.id.list_item_checkbox); 


      //Get data from cursor 
      final String text = cursor.getString(...); 

      //Add listener to the checkbox 
      checkBox.setOnClickListener(new OnClickListener() {...}); 

      //Bind data 
      textView.setText(text); 
     } 
    }