1

リストビューを適応させました。リスト ビューの内容は、私のクラスのオブジェクトでしたPeoplePeopleクラスには名前と年齢がありました。人物の表示方法を構成したかったので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()、リストビューの内容が異なる方法で表示されます。

カスタムアダプターを実装するとすぐに、これは機能しなくなりました。この問題を調べたところ、人々のデータベースが更新されていることがわかりましたが、ビューを無効にしてdatasetchangedなどを通知していたにもかかわらず、リストビューはビューを更新していませんでした。カスタムアダプターについて何か欠けているものはありますか?

ありがとう

編集: 私の正確な方法を参照してください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 シンプル アダプターの表示

4

4 に答える 4

1

リストビューを使用している場合は、custom_adapter.notifyDataSetChanged();を呼び出す必要があります。リストビューを更新します。リストビューを自動的に更新します。本当のことは、リストビューが表示している文字列は、ユーザーの選択に応じてcustom_adapterで正しいはずです。

それでも問題が解決しない場合は、 mData.get(position).getFullName(); を確認してください。textview に設定する正しい文字列を返しています。

于 2013-10-09T05:42:02.890 に答える
1

私は提案します:

  • @Overrideメソッドに注釈を追加する
  • String論理パスごとに a を返します。これは、
  • defaultにステートメントを追加するswitch
  • 、、、または(つまり、プリミティブではない)かどうかの前に確認myDisplaySwitcherします。nullswitchCharacterByteIntegerShort
于 2013-10-09T05:42:10.613 に答える
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 に答える
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 に答える