当前位置:编程学习 > wap >>

大神求助-listview 错位问题子布局单击调用线程

页面实时刷新,刷新中listview绑定了适配器,适配器中我对lisview中的button写了onclick,在单击事件中由于要http,所以里面的代码也是线程中的,有两个线程,我打印的日志显示,错位  。 00 11     两行,我单击第一行  预期是0, 可是是1



public void shuaxi()
{
// if(chatid.equals(""))
// {
// //Toast.makeText(getApplicationContext(), "当前没有召开的会议",Toast.LENGTH_SHORT).show();
// handler2.removeCallbacks(threadRunnable2);
// }
j=0; 
m=0;
//会议成员数据返回值
String arraylist[]=new String[100];
//会议成员各数据返回值
String list[]=new String[7];
ArrayList<String> mserverConferenceId=new ArrayList<String>(); 
//服务器传回来的用户名号码对象组
ArrayList<String> mpernum=new ArrayList<String>(); 
//服务器传回来的用户名对象组
ArrayList<String> mpername=new ArrayList<String>(); 
//服务器传回来的用户进入会议时间对象组
ArrayList<String> mservertime=new ArrayList<String>(); 
//服务器传回来的用户类型对象组
ArrayList<String> mserverclass=new ArrayList<String>(); 
//服务器传回来用户状态对象组
ArrayList<String> mserverstate=new ArrayList<String>();  
//服务器传回来用户音量对象组
ArrayList<String> mservervideo=new ArrayList<String>();  
mpernum.clear();
mpername.clear();
mserverstate.clear();
MyAdapter adapter=new MyAdapter(mpernum,mpername,mserverstate,this);
listiconference.setAdapter(adapter);
listiconference.setVisibility(View.GONE);
adapter.notifyDataSetChanged();
listiconference.setVisibility(View.VISIBLE);
InputStream inputStream=null;
//将字符放在NameValuePair
//会议创建者手机号码
NameValuePair  nameValuecreatedatamanage=new BasicNameValuePair("creater", creater);
//会议ID
NameValuePair  nameValueConferenceId=new BasicNameValuePair("chatid", chatid);
//将NameVaulePair加载到nameValuePairs中
List<NameValuePair> nameValuePairs=new ArrayList<NameValuePair>();
nameValuePairs.add(nameValueConferenceId);
nameValuePairs.add(nameValuecreatedatamanage);
try{
//传数据,编码转化为utf-8
HttpEntity requestHttpEntity=new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8);
HttpPost httpPost=new HttpPost(baseUrl);
httpPost.setEntity(requestHttpEntity);
HttpClient hhtpClient=new DefaultHttpClient();
try{
httpResponse=hhtpClient.execute(httpPost);
httpEntity=httpResponse.getEntity();
inputStream=httpEntity.getContent();
BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
String result="";
//ConferenceId
String line="";
String bijiao="";
line=reader.readLine();
//判断会议是否结束
if(!(line.equals("clear")))
{
boo=true;
}
if(boo)
{
if(line.equals("clear"))
{
creatsource.setConferenceId("");
chatid=creatsource.getConferenceId();
}
}
for(int i=0;i<line.length();i++){
bijiao=line.substring(i, i+1);
if(!bijiao.equals(";"))
{
result+=bijiao;
if(result.equals("clear"))
{
conferenceMain.setText("");
cardNum.setText("");
personNum.setText("");
}
}
else {
arraylist[j]=result;
j++;
result="";
}
}
}catch(Exception e)
{
e.printStackTrace();
}finally{
try{
inputStream.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
}catch(Exception e)
{
e.printStackTrace();
}
//对服务器传来的各个值开始赋值
String resultserver="";
try{
for(int k=0;k<j;j++)
{
m=0;
for(int i=0;i<arraylist[k].length();i++)
{   
//控制最后一个字符让其可以赋值到数组
String bijiao=null;
bijiao= arraylist[k].substring(i, i+1);
if(!(bijiao.equals("|")))
{
resultserver+=bijiao; 
if(m==6)
{
list[m]=resultserver;
}
}else 
{
list[m]=resultserver;
m++;
resultserver="";
}
}
//对服务器传来的各个值开始赋值
serverConferenceId=list[0];
pernum=list[1];
pername=list[2];
servertime=list[3];
serverclass=list[4];
serverstate=list[5];
servervideo=list[6]; if(k==0)
{
userlist=pernum;
}else
{
userlist+=";";
userlist+=pernum;
}

//对服务器传来的各个值开始赋值数据组值
mserverConferenceId.add(serverConferenceId);
//用户号码
mpernum.add(pernum);
//用户名
mpername.add(pername);
mservertime.add(servertime);
mserverclass.add(serverclass);
//听说状态
mserverstate.add(serverstate);
mservervideo.add(servervideo);
//给会议主题赋值
conferenceMain.setText(theme);

//给会议号码赋值
cardNum.setText(chatid);
personNum.setText(mpernum.size()+"");

// }
k++;
MyAdapter adapter2=new MyAdapter(mpernum,mpername,mserverstate,this);
listiconference.setAdapter(adapter2);  
}
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public static  class MyAdapter extends BaseAdapter {

private ProgressBar posonbar = null;
private ArrayList<String> mpernum; 
private ArrayList<String> mpername; 
private ArrayList<String> mserverstate; 
private LayoutInflater inflater = null; 
//构造器
private Context context;  
MyAdapter(ArrayList<String> mpernum,ArrayList<String> mpername,ArrayList<String>mserverstate,Context context) {
this.mpernum = mpernum;
this.mpername = mpername;
this.mserverstate = mserverstate;
this.context = context; 
inflater = LayoutInflater.from(context);  
}
public int getCount() {  
//设置绘制数量   
return mpernum.size();  
}  
public Object getItem(int position) {  
return mpernum.get(position);  
}  
public long getItemId(int position) {  
           return position;
 
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null; 
// doSomething(parent.getAdapter().getItem(position));
if (convertView == null ) {
convertView = inflater.inflate(
R.layout.iconferencememberlist, null);
holder = new ViewHolder(); 
holder.pername= (TextView)convertView.findViewById(R.id.textVname);
holder.pernum = (TextView)convertView.findViewById(R.id.textVNum);
holder.serverstate=(Button)convertView.findViewById(R.id.imlister);
holder.serverout= (Button)convertView.findViewById(R.id.imexit);
//holder.progressbar=(ProgressBar)convertView.findViewById(R.id.progressBar);
convertView.setTag(holder); 
}
else {  
// 取出holder   
holder = (ViewHolder) convertView.getTag();  
}  
//用户姓名
holder.pername.setText(mpername.get(position));
//用户号码
holder.pernum .setText(mpernum.get(position));
Log.e("poso111111", position+"");
//踢出用户监听事件
holder.serverout.setOnClickListener(new serveroutListener( position,progressBarsmall) );

//holder.serverout.setOnClickListener(new serveroutListener( position,holder.progressbar) );
// // Log.e("position", position+"");
//改变用户可讲状态监听事件
if(mserverstate.get(position).equals("2"))
{
//设置背景色
holder.serverstate.setBackgroundResource(R.drawable.btn_speaking);
}else 
{
//设置背景色
holder.serverstate.setBackgroundResource(R.drawable.btn_listenering);
}
holder.serverstate.setOnClickListener(new serverstateListener(position,progressBarsmall));
return convertView;
}
//踢出用户监听事件
class serveroutListener implements OnClickListener {
//创建一个Handler对象
serveroutListener( int pos,ProgressBar bar){ 
poson =pos; 
Log.e("poso2222", poson+"");
notifyDataSetChanged();
// int count=1;
// if(count%2!=0)
// {
// threadsource threadsource=new threadsource();
// threadsource.setposn(poson);
// }
// count++;
posonbar=bar;

public void onClick( View v) {
notifyDataSetChanged();
Log.e("poso33333", poson+"");
posonbar.setVisibility(View.VISIBLE); 
RegThreadendExit regThreadExit = new RegThreadendExit();
ThreadPoolManager.getInstance().addTask(regThreadExit);



//踢出单个用户线程
private class RegThreadendExit extends SimpleTask {
public void run() {
// int p=0;
// threadsource threadsource=new threadsource();
// p=threadsource.getposn();
Message message = new Message();
Bundle bundle = new Bundle(); 
//进度条可见
registsource registsource=new registsource();
String creater=registsource.getPhonenum();
creatsource creatsource=new creatsource();
String chatid=creatsource.getConferenceId();
//输入输出字符串
InputStream inputStream=null;
//将字符放在NameValuePair
//会议创建者手机号码
NameValuePair  nameValuecreatedatamanage=new BasicNameValuePair("creater", creater);
//指令名
NameValuePair  nameValueCmdName=new BasicNameValuePair("cmd", "M_KICKOFF_USER_REQ");
//会议ID
NameValuePair  nameValueConferenceId=new BasicNameValuePair("chatid", chatid);
//会议成员链表
NameValuePair  nameValueUserList=new BasicNameValuePair("userlist", mpernum.get(poson));
Log.e("poso44444", poson+"");
//改变用户听说指令
NameValuePair  nameValueCmdpara=new BasicNameValuePair("cmdpara", "");
//将NameVaulePair加载到nameValuePairs中
List<NameValuePair> nameValuePairs=new ArrayList<NameValuePair>();
nameValuePairs.add(nameValuecreatedatamanage);
nameValuePairs.add(nameValueCmdName);
nameValuePairs.add(nameValueConferenceId);
nameValuePairs.add(nameValueUserList);
nameValuePairs.add(nameValueCmdpara);
try{
//传数据,编码转化为utf-8
HttpEntity requestHttpEntity=new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8);
HttpPost httpPost=new HttpPost(basecmdUrl);
httpPost.setEntity(requestHttpEntity);
HttpClient hhtpClient=new DefaultHttpClient();
try{
httpResponse=hhtpClient.execute(httpPost);
httpEntity=httpResponse.getEntity();
inputStream=httpEntity.getContent();
BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
String result="";
result=reader.readLine();
bundle.putString("result",result);
}catch(Exception e)
{
e.printStackTrace();
}finally{
try{
inputStream.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
异常
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,