问题描述
我正在创建一个与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 (将#修改为@)