我在“我放弃”这一点,我相信你知道。 我学习软件,对于我目前的项目,我应该继续开发去年有人工作过的半完成的应用程序。换句话说,我可能不会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中的每个人都是一个真实的孩子。视图包含个人资料图片(或占位符),以及两个文本(孩子拥有的'序列'的名称和数量)
答案 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。