ListView Загрузить больше при прокрутке - PullRequest
0 голосов
/ 18 сентября 2018

Я хотел бы, чтобы мой список загружал только 20 сообщений из моего списка массивов, а когда я прокручиваю до конца, загружаю еще 20, и так далее, и так далее.

Кстати, список заполняется снизупоследние сообщения представлены внизу 1-ым, и я бы хотел, чтобы это не изменилось.Загрузка старых и старых сообщений.

сейчас это код моего адаптера.

public class MensagemAdapter extends ArrayAdapter<Message> {

    private Context context;
    private List<Message> messages;
    private List<Users> users;


    public MensagemAdapter(@NonNull Context context, @NonNull List<Message> objects, @NonNull List<Users> users) {
        super(context, 0, objects);
        this.context=context;
        this.messages = objects;
        this.users = users;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        View view = null;

        if (messages != null) {

            LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
            Message message = messages.get(position);
            Log.d("Num", "getView: " +message.getUserId() + " " + message.getId());
            if(message.getUserId()==1 ){
                assert inflater != null;
                view = inflater.inflate(R.layout.right_no_attach,parent,false);
                TextView textoMensagem = view.findViewById(R.id.tv_mensage);
                textoMensagem.setText(message.getContent());
                if (message.getAttachments() !=null){

                    for(int i=0; i<message.getAttachments().size();i++){
                        //view = inflater.inflate(R.layout.right_attach,parent,false);
                        if (i==0){
                            ImageView attach = view.findViewById(R.id.imageView1);
                            attach.setVisibility(View.VISIBLE);
                            Picasso.get().load( message.getAttachments().get(i).getThumbnailUrl()).into(attach);

                        } else if (i==1){
                            ImageView attach = view.findViewById(R.id.imageView2);
                            attach.setVisibility(View.VISIBLE);
                            Picasso.get().load( message.getAttachments().get(i).getThumbnailUrl()).into(attach);
                        } else if(i==2){
                            ImageView attach = view.findViewById(R.id.imageView3);
                            attach.setVisibility(View.VISIBLE);
                            Picasso.get().load( message.getAttachments().get(i).getThumbnailUrl()).into(attach);
                        } else {
                            ImageView attach = view.findViewById(R.id.imageView3);
                            attach.setVisibility(View.VISIBLE);
                            Picasso.get().load( message.getAttachments().get(i).getThumbnailUrl()).into(attach);
                        }

                    }
                }

            }else{
                assert inflater != null;
                view = inflater.inflate(R.layout.left_no_attach,parent,false);
                TextView nomeMensagem = view.findViewById(R.id.nomeId);
                nomeMensagem.setText(users.get(message.getUserId()-1).getName());
                ImageView avatar = view.findViewById(R.id.avatarIm);
                Picasso.get().load(users.get(message.getUserId()-1).getAvatarId()).transform(new CircleTransform()).into(avatar);
                TextView textoMensagem = view.findViewById(R.id.tv_mensage);
                textoMensagem.setText(message.getContent());
                if (message.getAttachments() !=null){

                    for(int i=0; i<message.getAttachments().size();i++){
                        //view = inflater.inflate(R.layout.right_attach,parent,false);
                        if (i==0){
                            ImageView attach = view.findViewById(R.id.imageViewA);
                            attach.setVisibility(View.VISIBLE);
                            Picasso.get().load( message.getAttachments().get(i).getThumbnailUrl()).into(attach);

                        } else if (i==1){
                            ImageView attach = view.findViewById(R.id.imageViewB);
                            attach.setVisibility(View.VISIBLE);
                            Picasso.get().load( message.getAttachments().get(i).getThumbnailUrl()).into(attach);
                        } else if(i==2){
                            ImageView attach = view.findViewById(R.id.imageViewC);
                            attach.setVisibility(View.VISIBLE);
                            Picasso.get().load( message.getAttachments().get(i).getThumbnailUrl()).into(attach);
                        } else {
                            ImageView attach = view.findViewById(R.id.imageViewD);
                            attach.setVisibility(View.VISIBLE);
                            Picasso.get().load( message.getAttachments().get(i).getThumbnailUrl()).into(attach);
                        }

                    }
                }
            }


            if (message.getAttachments() ==null) {
                TextView textoMensagem = view.findViewById(R.id.tv_mensage);

                textoMensagem.setText(message.getContent());
            }


        }
        return view;
        }


    }

мне немного тяжело из-за разных макетов.

Чтоя могу сделать, чтобы сделать это?

Спасибо: D

1 Ответ

0 голосов
/ 18 сентября 2018

Прежде всего, я предполагаю, что при первом создании адаптера вы просто передаете 20 первых сообщений.И тогда вы захотите добавить больше, когда это необходимо.Это эффективный способ сделать это. Не , что у вас уже есть все сообщения в вашем списке, и вы просто показываете их при прокрутке вниз.

Имея это в виду.

Сначала определите, когда ваш listView прокручивается вниз.

Проверьте этот вопрос, как это сделать:

Выясните, прокручивается ли ListView до конца?

Добавьте публичный метод в свой адаптер и вызывайте его всякий раз, когда обнаруживаете, что ваш список прокручивается.

public void appendMessages(List<Messages> moreMessages){
  this.messages.addAll(moreMessages);
}

после этогоЗвоните:

adapter.notifyDatasetChanged();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...