在简单的待办事项列表Android应用程序无法正常工作的ListView的多个选择

时间:2014-08-05 00:10:26

标签: android listview

我是Android开发的新手,正在创建一个简单的待办事项列表。我试图让我的应用程序更改特定项目的背景颜色,并在我点击它时保持它的背景颜色(类似于突出显示)。我尝试过使用setChoiceMode(ListView.CHOICE_MODE_MULTIPLE),但这给了我一个复选框,这不是我想要的。我不想要复选框,而是想要改变背景颜色。

我已经在stackoverflow上阅读了很多关于这个问题的线程,但是没有一个解决了我的问题。任何建议将不胜感激。谢谢!

我的TodoActivity课程是:

package com.example.simpletodo;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class TodoActivity extends Activity {
    ArrayList<String> items;
    ArrayAdapter<String> itemsAdapter;
    ListView lvItems;

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_todo);
    lvItems = (ListView) findViewById(R.id.lvItems);
    items = new ArrayList<String>();
    itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);
    lvItems.setAdapter(itemsAdapter);
    items.add("First Item");
    items.add("Second Item");
    setupListViewListener();
    lvItems.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, items));
    lvItems.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}

private void setupListViewListener() {
    lvItems.setOnItemLongClickListener(new android.widget.AdapterView.OnItemLongClickListener() {
    @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long rowId) {
            items.remove(position);
            itemsAdapter.notifyDataSetChanged();
            return true;
        }
    });
}


public void addTodoItem(View v) {
    EditText etNewItem = (EditText) findViewById(R.id.etNewItem);
    itemsAdapter.add(etNewItem.getText().toString());
    etNewItem.setText("");
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
    }
}

我的XML文件是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >

    <ListView
        android:id="@+id/lvItems"
        android:layout_width="match_parent"
        android:layout_height="380dp"
        android:layout_above="@+id/button1"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="30dp"  />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="15dp"
        android:layout_marginRight="18dp"
        android:onClick="addTodoItem"
        android:text="@string/button_add" />

    <EditText
        android:id="@+id/etNewItem"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_marginBottom="15dp"
        android:layout_marginLeft="10dp"
        android:layout_toLeftOf="@+id/button1"
        android:hint="@string/add_new_item" >

        <requestFocus />
    </EditText>

</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

我道歉,改变了我的答案,因为我的第一个不正确。以下是使用默认适配器选择/突出显示多个项目的方法:

    String[] strArray = {"row1", "row2", "row3"};

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
            android.R.layout.simple_list_item_activated_1, strArray);

    lv.setAdapter(adapter);
    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

上面的代码会为您突出显示所选项目。如果您需要复选框,请使用以下布局替换:

     android.R.layout.simple_list_item_multiple_choice

以下功能可让您确定当前选择的项目。

    lv.getCheckedItemPositions();
    lv.getCheckedItemIds();

对于更复杂的事情(例如,自定义背景颜色,外观等),您需要提供自定义布局和/或覆盖适配器的getView()函数。这是一个很好的教程:http://www.vogella.com/tutorials/AndroidListView/article.html