Автозаполнение с адаптером, показывающим повторяющийся результат

Сначала мой файл json.

[{"MemberId":"MI001","MemberName":"Member 1"},
{"MemberId":"MI002","MemberName":"Member 2"},
{"MemberId":"MI003","MemberName":"Member 3"}]

вот как я вставил свой json в свой адаптер

 @Override
 public void onResponse(JSONArray  response) {
      try {
           Model_member m_member = new Model_member();
           List<String> list = new ArrayList<String>();
           for(int i = 0; i < response.length(); i++){
                            m_member.setMember_id(response.getJSONObject(i).getString("MemberId"));
                            m_member.setMember_name(response.getJSONObject(i).getString("MemberName"));
                            Log.d("ASDF", response.getJSONObject(i).getString("MemberName"));
                            memberList.add(m_member);
                                }


                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                        adapter.notifyDataSetChanged();
                    }

а вот и мой адаптер.

public class Adapter_member extends ArrayAdapter{
    private ArrayList<Model_member> mData;
    public Adapter_member(Context context, ArrayList<Model_member> m_member) {
        super(context, 0, m_member);
        this.mData = m_member;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.single_member_layout, parent, false);
        }

        Model_member m_member = getItem(position);
        TextView memberName =  convertView.findViewById(R.id.membername);
        memberName.setText(m_member.getMember_name());
        return convertView;
    }
    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public Model_member getItem(int position) {
        return mData.get(position);
    }

}

и вот мой pojo

public class Model_member {
    String member_id,member_name;

    public String getMember_id() {
        return member_id;
    }

    public void setMember_id(String member_id) {
        this.member_id = member_id;
    }

    public String getMember_name() {
        return member_name;
    }

    public void setMember_name(String member_name) {
        this.member_name = member_name;
    }

    @Override
    public String toString() {
        return getMember_name().toString();
    }
}

Итак, моя проблема в том, что когда я ввожу MI00, результат такой

enter image description here

я вижу только MI003. данные - looping, я имею в виду, что все результаты - MI003.

Как я могу заставить это работать правильно? Я что-то пропустил ?

Вам нужно создать объект Model_member внутри цикла. В противном случае вы просто продолжите редактировать и добавлять один и тот же объект снова и снова.

Robby Cornelissen 10.09.2018 08:24
List<String> list = new ArrayList<String>(); list.clear();
IntelliJ Amiya 10.09.2018 08:26
0
2
82
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто очистите свой предыдущий список перед вставкой новых элементов.

@Override
public void onResponse(JSONArray response) {
    if (memberList == null) memberList = new ArrayList<>();
    memberList.clear();

Причина

Because you have attached memberList to your adapter, when each time response come, then you don't clear previous List, and add new items again.

Это то, что я смог найти в вашем коде.

почему этот ответ получил отрицательный голос? этот ответ решит мою проблему

Boby 10.09.2018 08:27

Другие вопросы по теме