asyncTask 中 viewholder 的 setText
setText for viewholder inside asyncTask
基本上我想使用异步任务为一个文本视图设置文本,但我不知道该怎么做这就是我到目前为止所做的
public void onBindViewHolder(final ViewHolder holder, final int position) {
final ChatMessage msg = mMessagesList.get(position);
holder.messageTextView.setText(msg.getMessage());
new LongOperation().execute();
}
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... str) {
return null;
}
@Override
protected void onPostExecute(String result) {
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
我想在 asyncTask 中而不是在 onBindViewHolder 中为 messageTextView 设置文本,谢谢!
只是 setText
在 onPostExecute
块内,结果 string
就像 messageTextView.setText(result);
。希望它会起作用。
如果找不到要绑定的 view
,请使用 presenter/callbacks/interface
我不建议那样放置 asynctask。
public void onBindViewHolder(final ViewHolder holder, final int position) {
final ChatMessage msg = mMessagesList.get(position);
holder.messageTextView.setText(msg.getMessage());
new LongOperation(holder,msg.getMessage()).execute();
}
private class LongOperation extends AsyncTask<String, Void, String> {
private WeakReference<ViewHolder> holder;
private String message;
LongOperation(ViewHolder viewholder, String message){
holder = new WeakReference<ViewHolder>(viewholder);
this.message = message;
}
@Override
protected String doInBackground(String... str) {
//do all your background stuff here
return null;
}
@Override
protected void onPostExecute(String result) {
if(holder.get() != null){
holder.get().messageTextView.setText(message);
}
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
您使用弱引用来确保如果异步任务在您的应用程序被终止时仍处于活动状态,则异步任务不会阻止垃圾回收。
我还注意到这个异步任务叫做长操作。您不想在异步任务中执行长时间操作。设计的异步任务应该用于短期操作。另外,如果你的 onBindViewHolder() 被调用了很多(这通常是任何大小合适的 recyclerview 的情况),你将创建很多异步任务,这对性能非常不利。重新考虑你在做什么,几乎总是有更好的方法。
您最好专门为此目的创建一个处理程序和一个处理程序线程(并执行 post)。
基本上我想使用异步任务为一个文本视图设置文本,但我不知道该怎么做这就是我到目前为止所做的
public void onBindViewHolder(final ViewHolder holder, final int position) {
final ChatMessage msg = mMessagesList.get(position);
holder.messageTextView.setText(msg.getMessage());
new LongOperation().execute();
}
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... str) {
return null;
}
@Override
protected void onPostExecute(String result) {
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
我想在 asyncTask 中而不是在 onBindViewHolder 中为 messageTextView 设置文本,谢谢!
只是 setText
在 onPostExecute
块内,结果 string
就像 messageTextView.setText(result);
。希望它会起作用。
如果找不到要绑定的 view
,请使用 presenter/callbacks/interface
我不建议那样放置 asynctask。
public void onBindViewHolder(final ViewHolder holder, final int position) {
final ChatMessage msg = mMessagesList.get(position);
holder.messageTextView.setText(msg.getMessage());
new LongOperation(holder,msg.getMessage()).execute();
}
private class LongOperation extends AsyncTask<String, Void, String> {
private WeakReference<ViewHolder> holder;
private String message;
LongOperation(ViewHolder viewholder, String message){
holder = new WeakReference<ViewHolder>(viewholder);
this.message = message;
}
@Override
protected String doInBackground(String... str) {
//do all your background stuff here
return null;
}
@Override
protected void onPostExecute(String result) {
if(holder.get() != null){
holder.get().messageTextView.setText(message);
}
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
您使用弱引用来确保如果异步任务在您的应用程序被终止时仍处于活动状态,则异步任务不会阻止垃圾回收。
我还注意到这个异步任务叫做长操作。您不想在异步任务中执行长时间操作。设计的异步任务应该用于短期操作。另外,如果你的 onBindViewHolder() 被调用了很多(这通常是任何大小合适的 recyclerview 的情况),你将创建很多异步任务,这对性能非常不利。重新考虑你在做什么,几乎总是有更好的方法。
您最好专门为此目的创建一个处理程序和一个处理程序线程(并执行 post)。