2010-09-20 98 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