带有删除按钮的Android ListView

时间:2010-09-20 10:05:19

标签: android listview

我正在尝试将列表视图绑定到List。当我创建一个扩展ListActivity的活动并且我的布局文件中有一个文本视图(即活动绑定到活动中的默认列表视图)时,这可以正常工作。但是,我想要做的是有一个ListView,它包含一个图像按钮(进一步执行行的deeltion)和文本视图,以说明被绑定项目的名称。

任何人都可以向我指出如何做到这一点的方向:

  • 布局文件
  • 活动类

我已经玩过了,似乎不能让它工作,只要我将ListView /图像按钮添加到布局文件中,我的代码崩溃了。我也通过谷歌找到了一些例子,但似乎都没有用!

2 个答案:

答案 0 :(得分: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()调用一些函数来确认删除。当然,必须针对列表中的当前位置进行操作。

此代码段只是插图,但我希望它可以帮助您解决问题。

答案 1 :(得分:3)