Android:toString()方法与自定义适配器无法正常工作?

时间:2013-10-09 05:35:12

标签: java android listview

我有一个改编列表视图。列表视图的内容是我的班级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

4 个答案:

答案 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,如果它是ByteIntegerShort或{{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>