Android如何在列表中突出显示所选内容

Android如何在列表中突出显示所选内容,android,listview,Android,Listview,我想做的很简单 我有一个充满项目的列表片段。如果我触摸一个项目,我希望该项目的文本或背景改变颜色。这意味着此项目已被选中。现在,当我触摸另一个项目时,我希望最后一个项目变回正常并选择新项目 我该怎么做 多谢各位 编辑: 记住最后一个视图的解决方案可以工作,但取决于访问最后一个视图以设置其状态或颜色。现在这是可行的 但是我有新的问题。我还有一个在列表中向上移动项目的功能 这是: public void MoveUp(){ if (lastselected > 0){

我想做的很简单

我有一个充满项目的列表片段。如果我触摸一个项目,我希望该项目的文本或背景改变颜色。这意味着此项目已被选中。现在,当我触摸另一个项目时,我希望最后一个项目变回正常并选择新项目

我该怎么做

多谢各位

编辑:

记住最后一个视图的解决方案可以工作,但取决于访问最后一个视图以设置其状态或颜色。现在这是可行的

但是我有新的问题。我还有一个在列表中向上移动项目的功能

这是:

public void MoveUp(){
    if (lastselected > 0){
        String item = adapter.getItem(lastselected);
        adapter.remove(item);
        adapter.insert(item, lastselected-1);           
        lastselected = lastselected -1;
        System.err.println("Is View NULL " + (getListView().getChildAt(lastselected) == null));
    }
}
问题是(这就是为什么我在第二个解决方案中坚持“取消标记时做什么”),对于64项列表中的最后一项,函数getChildAt返回null。由于它变为空,我既不能设置它的选定状态,也不能设置它的颜色

这是我的调试打印输出:

07-21 18:30:54.490: WARN/System.err(6733): Is View NULL true
07-21 18:30:54.670: WARN/System.err(6733): Is View NULL true
07-21 18:30:54.860: WARN/System.err(6733): Is View NULL true
07-21 18:30:55.020: WARN/System.err(6733): Is View NULL true
07-21 18:30:55.180: WARN/System.err(6733): Is View NULL false
07-21 18:30:55.720: WARN/System.err(6733): Is View NULL false
07-21 18:30:55.930: WARN/System.err(6733): Is View NULL false
07-21 18:30:56.110: WARN/System.err(6733): Is View NULL false
07-21 18:30:56.340: WARN/System.err(6733): Is View NULL false
我一直在做的就是按向上按钮。如果我能找到某种方法让这个函数返回一个非空指针,我将不胜感激。谢谢

您可以使用。单击一个项目时将调用它

然后可以更改背景/文本颜色并将其标记为高亮显示。如果要保护此状态,可以使用类中的字段来实现,该字段保存选定项的ID(或其他内容)


只是一个小例子:

public class YourFragment extends ListFragment{

    private long current_id;
    private ListView current_lv;

    public void onListItemClick (ListView l, View v, int position, long id){
        // Check if the fields are initialized:
        if (current_id != null && current_lv != null){
            // Unmark the previously selected entry:
            unmark();
        }
        // Mark the currently selected entry by using the
        // given ListView "l" and long "id"

        // Change the field-values:
        current_id = id;
        current_lv = l;
    }

    private void unmakr(){
        // Take the fields to unmark the entry
    }

}
我使用了
ListView
和条目的ID来确定哪一个是先前选择的条目,但是如果您愿意,您可以使用
视图或其他什么

但是您应该注意,该方法提供了哪些参数。

您可以使用。单击一个项目时将调用它

然后可以更改背景/文本颜色并将其标记为高亮显示。如果要保护此状态,可以使用类中的字段来实现,该字段保存选定项的ID(或其他内容)


只是一个小例子:

public class YourFragment extends ListFragment{

    private long current_id;
    private ListView current_lv;

    public void onListItemClick (ListView l, View v, int position, long id){
        // Check if the fields are initialized:
        if (current_id != null && current_lv != null){
            // Unmark the previously selected entry:
            unmark();
        }
        // Mark the currently selected entry by using the
        // given ListView "l" and long "id"

        // Change the field-values:
        current_id = id;
        current_lv = l;
    }

    private void unmakr(){
        // Take the fields to unmark the entry
    }

}
我使用了
ListView
和条目的ID来确定哪一个是先前选择的条目,但是如果您愿意,您可以使用
视图或其他什么

但是您应该注意,该方法提供了哪些参数。

使用选择器:

使用选择器:



这种方法肯定行不通。原因之一就是没有状态是state_lastpressed或类似的东西。我已经尝试了上面提到的所有状态,但没有一个在手指离开屏幕后将项目保持为选定的颜色。我不明白,当一个项目“state\u pressed”时,它的颜色会改变,一次只能有一个项目作为state\u pressed,对吗?对。但“按下”意味着我的手指按下了该项目。手指离开屏幕后,颜色会恢复。方法是将按下的视图设置为“选定”(
view.setSelected(true)
)。当按下另一视图时,将上一视图设置为“未选定”,然后选择新视图。您可以使用保存所选视图的类变量来跟踪当前选择的视图。@jrobinson我明白了,对,那么选择器将通过触发“state\u selected”状态来工作。这种方法肯定不起作用。原因之一就是没有状态是state_lastpressed或类似的东西。我已经尝试了上面提到的所有状态,但没有一个在手指离开屏幕后将项目保持为选定的颜色。我不明白,当一个项目“state\u pressed”时,它的颜色会改变,一次只能有一个项目作为state\u pressed,对吗?对。但“按下”意味着我的手指按下了该项目。手指离开屏幕后,颜色会恢复。方法是将按下的视图设置为“选定”(
view.setSelected(true)
)。当按下另一视图时,将上一视图设置为“未选定”,然后选择新视图。您可以使用保存所选视图的类变量来跟踪当前选择的视图。@jrobinson我明白了,对,那么选择器将通过触发“state_selected”来工作状态。此方法的问题是,我无法找到访问以前按下的视图的方法,以将其颜色更改回正常。此时,保存当前选定的条目ID将起作用。因此,您将拥有最后选择的条目id(并且可以取消标记),然后将其更改为当前选择的条目id。我理解这一点。我的意思是没有类似于getView(last_entry_id)的函数。或者至少我找不到它。我添加了一些示例代码,也许这有助于您理解我的意思。可以将更改的文本/背景颜色设置回正常值,以便不再标记条目。您必须在那里执行的操作取决于您将其中一个标记为“已选定”时所执行的操作。此方法的问题是,我无法找到访问以前按下的视图的方法,以将其颜色更改回正常。此时,保存当前选定的条目ID将起作用。因此,您将拥有最后选择的条目id(并且可以取消标记),然后将其更改为当前选择的条目id。我理解这一点。我的意思是没有类似于getView(last_entry_id)的函数。或者至少我找不到它。我添加了一些示例代码,也许这有助于您理解我的意思。可以将更改的文本/背景颜色设置回正常值,以便不再标记条目。你必须在那里做什么取决于当你把一个标记为“选中”时你要做什么。
android:background="@drawable/list_item_bg_selector"