带有删除按钮的Android ListView

3
我正在尝试将一个列表绑定到一个List。当我创建一个扩展ListActivity的活动并且在我的布局文件中有一个文本视图时(即活动绑定到活动中的默认listview),这个工作还不错。然而,我想做的是有一个包含图像按钮(进一步执行行删除)和文本视图以说明被绑定项目名称的ListView。
有谁能指导我如何做到这一点,其中包含:
- 布局文件 - 活动类
我已经尝试过了,似乎无法使其工作,只要我在布局文件中添加ListView/图像按钮,我的代码就会崩溃。我也通过Google找到了一些例子,但没有一个能够正常工作!
2个回答

11

即使您不通过扩展ListActivity,也可以获得List的功能,同时通过扩展Activity也可以实现。为了实现这一点,您需要具有显式命名的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()调用某个函数以确认删除。当然,这必须根据列表中当前位置完成。

这段代码片段只是举例说明,但我希望它对解决您的问题有所帮助。


太好了,谢谢!我今晚会试一下。我想ArrayAdapter是我缺少的部分。我假设默认的适配器只有一个填充单个文本视图的适配器? - januszstabik
是的,在默认适配器中只有单个文本视图。 - Zelimir
很高兴能够帮助。问候。 - Zelimir

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接