2010-09-20 78 views
3

我試圖將列表視圖綁定到列表。當我創建一個擴展ListActivity的活動,並且在佈局文件中有一個文本視圖(即活動綁定到活動中的默認列表視圖)時,這可以正常工作。然而,我想要做的是有一個ListView,它包含一個圖像按鈕(用於進一步執行行的縮進)和文本視圖來說明綁定項的名稱。帶有刪除按鈕的Android ListView

任何人都可以點我將展示如何做到這一點,它包含了方向:

  • 佈局文件
  • Activity類

我打周圍,不能似乎讓它工作,只要我添加一個ListView /圖像按鈕的佈局文件我的代碼崩潰。我也通過谷歌找到了一些例子,但沒有一個可以工作!

回答

11

即使您沒有擴展ListActivity,也可以通過擴展Activity來獲得List功能。爲了達到這個目的,你需要帶有明確命名的ListView元素的佈局文件,如下圖所示。

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout android:layout_width="fill_parent" 
    android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/Details_RelativeLayout01"> 
    <ImageView android:layout_centerHorizontal="true" 
     android:layout_alignParentTop="true" android:id="@+id/Details_ImageView01" 
     android:layout_marginTop="10dip" android:layout_width="60dip" 
     android:layout_height="60dip"></ImageView> 
    <ListView android:layout_width="fill_parent" 
     android:drawSelectorOnTop="false" android:clipChildren="true" 
     android:fitsSystemWindows="true" android:layout_height="fill_parent" 
     android:layout_below="@+id/Details_ImageView01" android:id="@+id/Details_ListView01"> 
    </ListView> 
</RelativeLayout> 

這裏我有一些圖像下面的結果列表。在你的Activity類中,你必須擴展ArrayAdapter。另外,您需要定義一個列表行的外觀。在下面的例子中,它在R.layout.one_result_details_row中完成。

public class ListOfDetails extends Activity { 

    private DetailsListAdapter mDetailsListAdapter; 

    private Vector<String> mDetailsTimeStringsList; 
    private Vector<String> mDetailsDateStringsList; 

    private ListView mDetailsListView; 

    private int mSelectedPosition; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     super.setContentView(R.layout.detailed_results_list); 

    ListView mDetailsListView = (ListView) findViewById(R.id.Details_ListView01); 
    ImageView mSelectedPuzzleIcon = (ImageView) findViewById(R.id.Details_ImageView01); 

     mDetailsListAdapter = new DetailsListAdapter(); 
     mDetailsListView.setAdapter(mDetailsListAdapter); 

     mDetailsTimeStringsList = new Vector<String>(); 
     mDetailsDateStringsList = new Vector<String>(); 

     updateTheList(); 
    } 

    class DetailsListAdapter extends ArrayAdapter<String> { 

     DetailsListAdapter() {   
      super(ListOfDetails.this, R.layout.one_result_details_row); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) 
     { 
      View row = null; 
      LayoutInflater inflater = getLayoutInflater(); 

      row = inflater.inflate(R.layout.one_result_details_row, parent, false); 

      TextView result = (TextView) row.findViewById(R.id.Details_Row_TextView01); 
      TextView date = (TextView) row.findViewById(R.id.Details_Row_TextView02); 
      Button deleteButton = (Button) row.findViewById(R.id.Details_Button01); 

      deleteButton.setOnClickListener(
       new Button.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         confirmDelete(); 
        } 
       } 
      ); 

      return(row); 
     } 
    } 
} 

刪除按鈕onClickListener()調用某個函數來確認刪除。當然,它必須根據列表中的當前位置來完成。

此代碼片段只是示例,但我希望它可以解決您的問題。

+0

優秀的,謝謝,我會盡力,這前夜。我認爲arrayadapter位是我失蹤的位。我認爲只使用默認適配器的適配器可以填充單個文本視圖? – januszstabik 2010-09-20 12:09:59

+0

是的,只有默認適配器中的單個文本視圖。 – Zelimir 2010-09-20 14:56:34

+0

夢幻般的答案,非常感謝你的所有細節:) – HXCaine 2011-01-03 15:34:35