微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将TextView中的clickable字符串转换为EditText insinde Adapter.class

如何解决将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 举报,一经查实,本站将立刻删除。