如何解决将TextView中的clickable字符串转换为EditText insinde Adapter.class
我正在尝试建立一个聊天室,该聊天室与IBM Watson Assistant进行通信。助手具有一个称为Options
的功能。我在ChatApdater
中实现了这些对象的功能,现在我想使选项可点击,因此,每当我单击选项时,该选项就会显示在我的EditText字段中,通常您可以在其中写入问题。示例with 4 options
我的ChatApdater
的代码如下:
protected Activity activity;
private int SELF = 100;
private ArrayList<Message> messageArrayList;
public ChatAdapter(ArrayList<Message> messageArrayList) {
this.messageArrayList = messageArrayList;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
View itemView;
// view type is to identify where to render the chat message
// left or right
if (viewType == SELF) {
// self message
itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.chat_item_self,parent,false);
} else {
// WatBot message
itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.chat_item_watson,false);
}
return new ViewHolder(itemView);
}
@Override
public int getItemViewType(int position) {
Message message = messageArrayList.get(position);
if (message.getId() != null && message.getId().equals("1")) {
return SELF;
}
return position;
}
@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;
tv.setVisibility(View.GONE);
LinearLayout optionsContainer = ((ViewHolder) holder).optionsContainer;
TextView messageTextView = createStartView(message.getMessage(),optionsContainer.getContext());
optionsContainer.addView(messageTextView);
for ( DialogNodeOutputoptionsElement r : message.getoptions() ) {
System.out.println("blblba");
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) {
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
}
});
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) {
// Toast.makeText(context,Toast.LENGTH_SHORT).show();
// add here what the click should do
}
});
return tv;
}
@Override
public int getItemCount() {
return messageArrayList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView message;
ImageView image;
LinearLayout optionsContainer;
EditText eingabe;
public ViewHolder(View view) {
super(view);
message = (TextView) itemView.findViewById(R.id.message);
image = (ImageView) itemView.findViewById(R.id.image);
optionsContainer = (LinearLayout) itemView.findViewById(R.id.optionsContainer);
eingabe = (EditText) itemView.findViewById(R.id.einmessage);
//Todo: Uncomment this if you want to use a custom Font
}
}
}
重要的部分就在这里:
private TextView createTextView(final String text,(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) {
// STORE CLICKED OPTION IN EDITTEXT
}
});
return tv;
}
我必须为聊天创建3种不同的XML。一个用于沃森,myinput和整个聊天(存储Edittext的位置)。 ChatApdater
尚未提及此XML。
XML看起来像这样:
<EditText
android:id="@+id/einmessage"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="10dp"
android:layout_weight="3"
android:background="@null"
android:hint="@string/what_s_on_your_mind"
android:lines="1"
android:paddingLeft="10dp" />
解决方法
从def filter_rows(value) :
pattern = re.compile("[A-Z]{3}[0-9]")
try :
if not pattern.match(value) :
return 'remove'
return value
except :
if type(value) == 'float' :
return 'remove'
获取被点击的项目:
TextView
要在tv.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String str = tv.getText().toString();
}
中设置字符串:
EditText
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。