1

我有一个调整列表视图。列表视图的内容是我班级的对象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()方法导致列表视图以不同的方式显示其内容。

一旦我实现了我的自定义适配器,它就停止了工作。我调查了此事,发现我的人员数据库正在更新,但列表视图并没有刷新它的视图,尽管我正在使视图无效并通知数据集更改等。我是否缺少关于自定义适配器的一些东西?

谢谢

编辑:请参阅我的 EXACTtoString()方法。它不适用于这种方法。它适用于普通适配器,但不适用于我的自定义适配器。

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 简单适配器在列表视图中显示

4

4 回答 4

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 内容不会相应更新。

于 2013-10-09T05:40:28.653 回答
1

如果您使用的是列表视图,那么您需要调用custom_adapter.notifyDataSetChanged(); 刷新列表视图。它将自动更新列表视图。实际情况是,根据用户的选择,您的列表视图正在使用的任何字符串在 custom_adapter 中都应该是正确的。

如果它也没有解决您的问题,请检查您的 mData.get(position).getFullName(); 正在返回正确的字符串以在 textview 上设置。

于 2013-10-09T05:42:02.890 回答
1

我会建议:

  • @Override注释添加到您的方法
  • String为每个逻辑路径返回一个,这意味着
  • default语句添加到switch
  • 在if 它是, , , or之前检查myDisplaySwitcher(也就是说,不是原语)nullswitchCharacterByteIntegerShort
于 2013-10-09T05:42:10.613 回答
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(),以作为良好的编码习惯。

于 2013-10-09T05:44:29.340 回答