Android列表视图 - 项目的持续突出显示 - 如何?

时间:2014-03-13 10:32:20

标签: android listview

我在“我放弃”这一点,我相信你知道。 我学习软件,对于我目前的项目,我应该继续开发去年有人工作过的半完成的应用程序。换句话说,我可能不会100%了解一切如何运作。

我想解决的一个错误是ListView突出显示。这就是我自己理解的方式:

该应用程序在ListView中有一个人员列表,位于屏幕左侧。当您点击某个人时,它会在屏幕右侧显示一些内容。单击某个人时,该人在ListView中突出显示。这一切都很好,按预期工作。然而,有两个小问题,我似乎无法解决它们。

1:启动应用程序时,默认选择第一个人。没关系。但这个人没有突出显示。我猜我可以在“OnCreate”中以编程方式解决这个问题,但是setSelection,setPressed,setItemChecked,performItemClick或者其他任何东西似乎都不适合我。这可能只是缺乏理解。

2:在应用程序中有第二个活动。如果我选择一个人 - >转到其他活动 - >返回第一个活动,突出显示丢失。我已经尝试保存当前项目的位置(从onItemClick拉出它),然后在返回到第一个活动时以编程方式再次突出显示它。但是,我遇到了同样的问题:setSelection,setPressed等都不会为我突出显示这个人。

所以我开始研究XML文件,我很难理解。我想到的是这个XML文件决定了如何选择项目:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:state_selected="false"
        android:state_pressed="false"
        android:drawable="@drawable/list_item_selected" />

    <item
        android:state_pressed="true"
        android:drawable="@drawable/list_item_selected" />

    <item
        android:state_selected="true"
        android:state_pressed="false"
        android:drawable="@drawable/list_item_selected" />
</selector>

老实说,我很难理解何时决定突出显示什么时候不突出显示。我想要解释或参考这个,我似乎找不到任何描述它是如何工作的东西。

有没有人知道如何解决这两个问题,所以突出显示正常?如果您需要查看更多代码,请告诉我,我不太确定要发布什么。可能有一些我误解的基本内容。

编辑:这是相关的适配器。

public class ChildAdapter extends BaseAdapter {

private List<Child> items;
private LayoutInflater inflater;
private Activity activity;

public ChildAdapter(Activity activity, List<Child> items) {

    this.items = items;
    this.inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.activity = activity;
}

public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    if (v == null) {
        v = inflater.inflate(R.layout.children_list_row, null);
    }

    TextView nameTextView = (TextView)v.findViewById(R.id.name);
    TextView countTextView = (TextView)v.findViewById(R.id.count);
    ImageView childImage = (ImageView)v.findViewById(R.id.child_image);

    Child c = items.get(position);

    nameTextView.setText(c.getName());

    if (c.getSequenceCount() == 1) {
    countTextView.setText(c.getSequenceCount() + " sequence");
    } else {
        countTextView.setText(c.getSequenceCount() + " sequences");
    }

    if (c.getPicture() == null) {
        childImage.setImageDrawable(activity.getResources().getDrawable(R.drawable.placeholder));
    } else {
        childImage.setImageDrawable(c.getPicture());
    }

    return v;
}

为了解释上下文,ListView中的每个人都是一个真实的孩子。视图包含个人资料图片(或占位符),以及两个文本(孩子拥有的'序列'的名称和数量)

2 个答案:

答案 0 :(得分:0)

试试这个:

//全局声明

 private ArrayList<Person> list_person = new ArrayList<Person>();
            public Person selectedPerson;

//内部活动创建

 selectedPerson = list_person.get(0);

//在适配器类

//在getview方法中

    Person person = list_person.get(position);

        if (person == selectedPerson) {
            convertView.setBackgroundColor(Color.parseColor("#6E7C7D"));
        } else {
            convertView.setBackgroundColor(Color.TRANSPARENT);
        }

//和onitemclick更改selectedPerson位置

答案 1 :(得分:0)

您还必须提供适配器类代码,以便更好地理解。来到你的选择器部分,选择器中的每个项目代表与选择器相关联的布局状态,就像你的第一个项目所说,如果用户没有按下一个不是的项目,列表项目的背景将看起来像“drawable / list_item_selected”选择。这些物品应按特定的方式安排。详情请查看this