我有一个改编列表视图。列表视图的内容是我的班级People
中的对象。 People
班级有姓名和年龄。我想配置人员的显示方式,因此我构建了toString()
方法,如下所示:
@Override
public String toString() {
switch(HomeScreenActivity.displayMode){
case 1:
return lastName + " " + firstName;
case 2:
return firstName + " " + mobileNumber;
case 3:
return lastName + " " + mobileNumber;
default:
return firstName + " " + lastName;
}
}
所以这是如何工作的,在我的程序中,用户被要求他/她的首选显示方法,他们选择它并myDisplaySwitcher
相应地更改,因此toString()
方法导致列表视图显示它的内容不同。
一旦我实现了自定义适配器,这就停止了工作。我调查了这个问题,我发现我的人员数据库正在更新但是listview只是没有刷新它的视图,尽管我使视图无效并且通知了更改等等。是否有一些关于自定义适配器的东西?
由于
编辑:请参阅我的EXACT toString()
方法。它不适用于这种方法。它适用于普通适配器,但不适用于我的自定义适配器。
EDIT2:这是我的customAdapter。这很可能是问题所在,但这对我来说非常困惑。
private class peopleAdapter extends BaseAdapter {
private List<People> mData;
public peopleAdapter(List<People> data) {
mData = data;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public String getItem(int position) {
return mData.get(position).getFullName();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView result;
if (convertView == null) {
result = (TextView) getLayoutInflater().inflate(
R.layout.home_screen_people_view, parent, false);
//result.setTextColor(getResources().getColor(
//R.color.darkish_blue));
} else {
result = (TextView) convertView;
}
final String personRow = getItem(position);
result.setText(personRow);
result.setBackgroundResource(R.drawable.list_selector);
return result;
}
}
EDIT3:这是我之前的一个问题。我按照接受的答案进行操作。这是针对已经实现的简单ArrayAdapter。现在我正在尝试使用自定义适配器实现相同的功能。 Android simple adapter display in a listview
答案 0 :(得分:1)
当你重写toString()时,你的代码应如下所示:
@Override
public String toString() {
switch(myDisplaySwitcher){
case 1: return firstName + " " + lastName + " " + age ;
break;
case 2: return lastName + " " + firstName + " " + age ;
break;
case 3: return firstName + " " + lastName ;
break;
}
}
由于您没有在代码中返回字符串,因此listView内容不会相应地更新。
答案 1 :(得分:1)
如果您使用的是listview,则需要调用 custom_adapter.notifyDataSetChanged(); 来刷新listview。它会自动更新列表视图。真实的东西是你的listview根据用户的选择在 custom_adapter 中进行二值分析应该是正确的。
如果它也没有解决你的问题,那么检查你的mData.get(position).getFullName();返回正确的字符串以在textview上设置。
答案 2 :(得分:1)
我建议:
@Override
注释添加到您的方法String
,这意味着default
switch
语句
myDisplaySwitcher
null
之前检查switch
Character
,如果它是Byte
,Integer
,Short
或{{1}}(也就是说,不是原始的)答案 3 :(得分:0)
@Override
public void toString() {
switch(myDisplaySwitcher){
case 1: System.out.println(firstName + " " + lastName + " " + age);
break;
case 2: System.out.println(lastName + " " + firstName + " " + age);
break;
case 3: System.out.println(firstName + " " + lastName);
break;
}
}
默认toString();
已被覆盖,并且在调用toString()
时将调用您的方法。建议您将方法重命名为convertToString()
,以作为良好的编码习惯。< / p>