我在做一个从服务器下载 文字后 显示到TextView的程序的时候
在下载前 启动了 一个 圆形进度条 下载是在一个新的线程中完成的
之前 进度条可以转动 , 之后 当下载完成之后 执行TextView.setText();操作的时候
进度条 不动 了 我是用Handler 发送信息 更新TextView 的
是不是因为 在更新TextView的时候 阻塞了 进度条的转动 , 不是很懂 大家帮帮忙
在下载前 启动了 一个 圆形进度条 下载是在一个新的线程中完成的
之前 进度条可以转动 , 之后 当下载完成之后 执行TextView.setText();操作的时候
进度条 不动 了 我是用Handler 发送信息 更新TextView 的
是不是因为 在更新TextView的时候 阻塞了 进度条的转动 , 不是很懂 大家帮帮忙
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.txtread);
handler = new Handler(this);
addto = (Button) findViewById(R.id.tianjia);
tv_title = (TextView) findViewById(R.id.txtreadtitle);
tv_txt = (TextView) findViewById(R.id.txtreadtxt);
Intent intent = this.getIntent();
title = intent.getStringExtra("title");
if(intent.getStringExtra("type").equals("nobutton"))
{
addto.setVisibility(View.GONE);
}
txt = FileManager.get(title);
addto.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
FKActivity.dbhelper.insertData(title,
FileManager.get(title));
Toast.makeText(TextReadActivity.this, TextReadActivity.this
.getString(R.string.tjcg), 8000)
.show();
}
});
loading();
}
private void loading()
{
//启动进度条
startProgressDialog(getResources().getString(R.string.loading));
handler.postDelayed(new Runnable()
{
public void run()
{
//这个是从服务器上 下载文字
initText();
Message msg = new Message();
msg.what = 0;
handler.sendMessage(msg);
}
},1);
}private void startProgressDialog(String string)
{
pd = new ProgressDialog(this);
pd.setMessage(string);
pd.show();
}
private void initText()
{
HttpDownload hd = new HttpDownload(TextReadActivity.this);
String download = hd.downLoad(hd.id+txt);
words = download;
}
@Override
public boolean handleMessage(Message msg)
{
// TODO Auto-generated method stub
switch(msg.what)
{
case 0:
//就是执行 接下来这两句的时候 ,
//界面卡住 进度条不动了
tv_title.setText(title);
tv_txt.setText(words);
pd.dismiss();
break;
}
return true;
}
主要的代码 就是这样子的
我试了下你的代码,可以的。你是不是handler定义错了。我一开始也只是new handel()。捕获不到消息。应该是new handel(main.this)
不会卡主的啊。我除了没执行你那个initText()方法,其他都按照你的写法来的,执行正确的
主线程没同事做两件事啊,settext在前,progressDialog在后,怎么会阻塞呢。况且我这边按照你的写法也证明没阻塞。要么你把你完整代码和布局文件帖下,我拿过来试下可不可以
{
private String title = null;
private String txt = null;
private String words = null;
private TextView tv_title = null;
private TextView tv_txt = null;
private ProgressDialog pd = null;
private Handler handler = null;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.read);
handler = new Handler(this);
tv_title = (TextView) findViewById(R.id.txtreadtitle);
tv_txt = (TextView) findViewById(R.id.txtreadtxt);
Intent intent = this.getIntent();
title = intent.getStringExtra("title");
txt = FileManager.get(title);
loading();
}
private void loading()
{
startProgressDialog(getResources().getString(R.string.loading));
handler.postDelayed(new Runnable()
{
public void run()
{
initText();
Message msg = new Message();
msg.what = 0;
handler.sendMessage(msg);
System.out.println("sendmsg");
}
},1);
}
private void startProgressDialog(String string)
{
pd = new ProgressDialog(this);
pd.setMessage(string);
pd.show();
}
private void initText()
{
HttpDownload hd = new HttpDownload(Read.this);
String download = hd.downLoad(hd.id+txt);
words = download;
}
@Override
public boolean handleMessage(Message msg)
{
// TODO Auto-generated method stub
switch(msg.what)
{
case 0:
tv_title.setText(title);
tv_txt.setText(words);
pd.dismiss();
break;
}
return true;
}
完整代码 就是这样子的 你试试看 我用的是1.6的虚拟机
是的。除了下载的没有。我把我这边能通过的代码贴给你package test.main;import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import android.widget.TextView;
import android.widget.Toast;public class test1 extends Activity implements Callback{
private String title = null;
private String txt = null;
private String words = null;
private TextView tv_title = null;
private TextView tv_txt = null;
private ProgressDialog pd = null;
private Handler handler = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test1);
handler = new Handler(this);
tv_title = (TextView) findViewById(R.id.txtreadtitle);
tv_txt = (TextView) findViewById(R.id.txtreadtxt);
title="title";
// Intent intent = this.getIntent();
// title = intent.getStringExtra("title");
//
// txt = FileManager.get(title);
loading();
} private void loading()
{
startProgressDialog("dialog");
handler.postDelayed(new Runnable()
{
public void run()
{
initText();
Message msg = new Message();
msg.what = 0;
handler.sendMessage(msg);
}
},1);
}
private void startProgressDialog(String string)
{
pd = new ProgressDialog(this);
pd.setMessage(string);
pd.show();
}
private void initText()
{
// HttpDownload hd = new HttpDownload(Read.this);
// String download = hd.downLoad(hd.id+txt);
// words = download;
words="mytest";
}
@Override
public boolean handleMessage(Message msg)
{
// TODO Auto-generated method stub
switch(msg.what)
{
case 0:
tv_title.setText(title);
tv_txt.setText(words);
pd.dismiss();
break;
}
return true;
}}<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/common_bg_middle"
>
<EditText android:layout_height="wrap_content" android:id="@+id/txtreadtitle" android:text="EditText" android:layout_width="match_parent"></EditText>
<EditText android:layout_height="wrap_content" android:id="@+id/txtreadtxt" android:text="EditText" android:layout_width="match_parent"></EditText>
</LinearLayout>