ChatAdapter重写消息倍数

问题描述

我正在创建一个与Watson Assistant(也称为chatbot)通信的聊天应用程序。 它具有可以单击的选项的功能。看起来像这样:App picture 但是,每当我选择一个选项时,ChatAdapter都会将最后一条消息重写两次:App picture (2)

我找不到我的错,所以我需要一些帮助。 我正在像这样使用ChatAdapter:

 @Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder,int position) {
    Message message = messageArrayList.get(position);
    switch (message.type) {
        case TEXT:
            ((ViewHolder) holder).message.setText(Html.fromHtml(message.getMessage()+"<br/>"));
                break;
        case IMAGE:
            ((ViewHolder) holder).message.setVisibility(View.GONE);
            ImageView iv = ((ViewHolder) holder).image;
            Glide
                    .with(iv.getContext())
                    .load(message.getUrl())
                    .into(iv);
            break;
        case OPTION:
            TextView tv = ((ViewHolder) holder).message;
         //   EditText edit = ((ViewHolder) holder).eingabe;
            tv.setVisibility(View.GONE);
            LinearLayout optionsContainer = ((ViewHolder) holder).optionsContainer;
            EditText edit = ((ViewHolder) holder).eingabe;

            TextView messageTextView = createStartView(message.getMessage(),optionsContainer.getContext());
            optionsContainer.addView(messageTextView);

            for ( DialogNodeOutputoptionsElement r : message.getoptions() ) {
                System.out.println("Springt bitte nochmal hier rein...");
                String option = r.getLabel();
                TextView optionTextView = createTextView(option,optionsContainer.getContext());
                // add the created textView to our container
                optionsContainer.addView(optionTextView);
            }
            break;
        case PAUSE:break;
    }



}
private TextView createTextView(final String text,final Context context) {
    final TextView tv = new TextView(context);
    LinearLayout.LayoutParams params=new LinearLayout.LayoutParams
            ((int) LinearLayout.LayoutParams.WRAP_CONTENT,(int) LinearLayout.LayoutParams.WRAP_CONTENT);
    tv.setLayoutParams(params);
    tv.setTextSize((float) 15);
    tv.setText(Html.fromHtml(text));
    int blueColor = Color.parseColor("#0000ff");
    // make text blue
    tv.setTextColor(blueColor);
    // make text underline
    tv.setPaintFlags(tv.getPaintFlags()| Paint.UNDERLINE_TEXT_FLAG);
    tv.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //  Toast.makeText(context,"Link clicked",Toast.LENGTH_SHORT).show();
            // add here what the click should do
            String str = tv.getText().toString();

        }

    });
    return tv;

}
private TextView createStartView(String text,Context context) {
    TextView tv = new TextView(context);
    LinearLayout.LayoutParams params=new LinearLayout.LayoutParams
            ((int) LinearLayout.LayoutParams.WRAP_CONTENT,(int) LinearLayout.LayoutParams.WRAP_CONTENT);
    tv.setLayoutParams(params);
    tv.setTextSize((float) 15);
    tv.setText(Html.fromHtml(text));
    int blueColor = Color.parseColor("#0000ff");
    // make text blue
    // make text underline
    tv.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        }

    });
    return tv;

}

所以我使用case Option,然后进入两种不同的方法:createTextView(),createStartView(),以创建标题和for语句中的不同选项。

在我的MainActivity中,我也有一个Case Option,但我不认为这有问题:

                        List<RuntimeResponseGeneric> responses = response.getResult().getoutput().getGeneric();

                    for (RuntimeResponseGeneric r : responses) {
                        Message outMessage;
                        switch (r.responseType()) {
                            case "text":
                                outMessage = new Message();
                                outMessage.setMessage(r.text());
                                outMessage.setId("2");

                                messageArrayList.add(outMessage);

                                // speak the message
                                if ( outMessage.getMessage().length() <= 200){
                                    new FirstLevel.SayTask().execute(outMessage.getMessage());}
                                break;

                            case "option":
                                outMessage =new Message();
                                String title = r.title();


                                outMessage.setoptions(r.options());
                                outMessage.setType(Message.Type.OPTION);
                                outMessage.setMessage(title);
                                outMessage.setId("2");

                                messageArrayList.add(outMessage);

                                // speak the message
                                if ( outMessage.getMessage().length() <= 200){
                                    new FirstLevel.SayTask().execute(outMessage.getMessage());}
                                break;

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)