- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个 ListView
,它有一个 TextView
和一个 ProgressBar
。 ProgressBar
最初处于不可见状态。我正在为包含 TextView 数据的 BaseAdapter
提供一个 ArrayList
。
当 ListView
的项目被点击时,ProgressBar
被启用,一个 Http 连接被建立并且 TextView
值被数据更新从服务器。为此,我使用了 AsyncTask
。
假设列表中有 10 个项目,我正在单击 1、2、3、4 个项目,在每个项目中显示进度条并更新 TextView 。但是当我滚动 ListView 时出现问题。之前显示在 3 的进度条在第 7、6、8、9 项中的任何一项中显示(它不再显示在 3 中)。 3 个项目进度条的行为并不具体,它可能发生在 1、2、4 进度条上。进度条画在任何地方。我不知道发生了什么
初始化 ListView
的 Activity 类:
private void onListViewItemSelection()
{
progressLstVw.setOnItemClickListener( new OnItemClickListener()
{
public void onItemClick( AdapterView<?> parent, View view, int position, long id )
{
downloadFile(url, view, position);
view.postInvalidate();
}
});
}
public void downloadFile(String url, View view, int position)
{
ProgressBar itemProgressBar = null;
TextView titleTxtVw = null;
itemProgressBar = (ProgressBar) view.findViewById(R.id.progressbar);
titleTxtVw = (TextView) view.findViewById(R.id.progress_txt_TxtVw);
progressBar = itemProgressBar;
progressTxtVw = titleTxtVw;
Handler handler = new Handler()
{
public void handleMessage(Message message)
{
switch (message.what)
{
case HttpConnection.DID_START:
{
Log.d("Twitter Icon", "Starting Connection");
progressBar.setVisibility(View.VISIBLE);
break;
}
case HttpConnection.DID_SUCCEED:
{
int position = message.getData().getInt("ITEM_POSITOIN");
listDataAry.get(position).setTxtData(message.getData().getString("RECIEVED_DATA"));
listDataAry.get(position).setProgressData(message.getData().getInt("PERCENT_CMPLTD"));
progressTxtVw.setText(listDataAry.get(position).getTxtData());
progressBar.setProgress(listDataAry.get(position).getProgressData());
break;
}
case HttpConnection.DID_CLOSED:
{
//progressBar.setVisibility(View.GONE);
break;
}
case HttpConnection.DID_ERROR:
{
Exception e = (Exception) message.obj;
e.printStackTrace();
break;
}
}
}
};
new HttpConnection(handler, position).get(url);
}
基本适配器获取 View 方法
public class ListAddapter extends BaseAdapter
{ 私有(private)上下文上下文=空; 私有(private) LayoutInflater layoutInflater = null; 私有(private) ArrayList urls = null;
public ListAddapter(Context context, LayoutInflater layoutInflater, ArrayList<ListData> urls)
{
this.context = context;
this.layoutInflater = layoutInflater;
this.urls = urls;
}
@Override
public int getCount()
{
System.out.println("getCount");
return urls.size();
}
@Override
public Object getItem(int arg0)
{
System.out.println("getItem");
return null;
}
@Override
public long getItemId(int arg0)
{
System.out.println("getItemId");
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
ViewHolder viewHolder = null;
if(row == null)
{
ViewController viewController = null;
row = layoutInflater.inflate(R.layout.listview, parent ,false);
viewController = new ViewController(row);
viewHolder = new ViewHolder();
viewHolder.viewController = viewController;
row.setTag(viewHolder);
}
else
{
viewHolder = (ViewHolder) row.getTag();
}
viewHolder.viewController.setTextData(urls.get(position).getTxtData());
viewHolder.viewController.setProgressData(urls.get(position).getProgressData());
/* if(row == null)
{
row = layoutInflater.inflate(R.layout.listview, parent ,false);
}
viewController = new ViewController(row);*/
return row;
}
static class ViewHolder
{
ViewController viewController;
}
查看 Controller 类
public ViewController(View view)
{
this.view = view;
intializeUI();
}
private void intializeUI()
{
txtView = (TextView) view.findViewById(R.id.progress_txt_TxtVw);
progressBar = (ProgressBar) view.findViewById(R.id.progressbar);
}
public void setProgressData(int progressData)
{
this.progressData = progressData;
progressBar.setProgress(this.getProgressData());
}
public int getProgressData()
{
return progressData;
}
public void setTextData(String textData)
{
this.textData = textData;
txtView.setText(this.getTextData());
}
public String getTextData()
{
return textData;
}
最佳答案
只需更改下面的代码,您就会得到正确的响应
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
ViewHolder viewHolder = null;
ViewController viewController = null;
row = layoutInflater.inflate(R.layout.listview, parent ,false);
viewController = new ViewController(row);
viewHolder = new ViewHolder();
viewHolder.viewController = viewController;
row.setTag(viewHolder);
viewHolder.viewController.setTextData(urls.get(position).getTxtData());
viewHolder.viewController.setProgressData(urls.get(position).getProgressData());
/* if(row == null)
{
row = layoutInflater.inflate(R.layout.listview, parent ,false);
}
viewController = new ViewController(row);*/
return row;
}
关于android - 滚动时 ListView 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7205419/
我有这种来自 Google map 自动完成的奇怪行为(或者我可能错过了某事)...想法?奇怪的: 您在输入中输入某物,例如“伦敦” 您按 [ENTER] 你按下 [CLEAR] 按钮 你点击进入'输
这段代码与《Learning Java》(Oracle Press Books)一书中的代码完全一样,但它不起作用。我不明白为什么它不起作用,它应该起作用。我用 OpenJDK 和 Sun JDK 7
示例 1 中究竟发生了什么?这是如何解析的? # doesnt split on , [String]::Join(",",("aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aa
我需要获得方程式系统的解决方案。为此,我使用函数sgesv_()。 一切都很好,它使我感到解决方案的正确结果。 但是我得到一个奇怪的警告。 警告:从不兼容的指针类型传递'sgesv_'的参数3 我正在
我目前在制作动画时遇到一个奇怪的问题: [UIView animateWithDuration:3 delay:0
alert('works'); $(window).load(function () { alert('does not work'); });
我的代码: public class MyTest { public class StringSorter implements Comparator { public
我正在学习 JavaScript。尝试理解代码, function foo (){ var a = b = {name: 'Hai'}; document.write(a.name +''
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
这按预期工作: [dgorur@ted ~]$ env -i env [dgorur@ted ~]$ 这样做: [dgorur@ted ~]$ env -i which date which: no
struct BLA { int size_; int size()const{ return size_; } } int x; BLA b[ 2 ]; BLA * p = &b[
我有以下代码: #test img {vertical-align: middle;} div#test { border: 1px solid green; height: 150px; li
我想大多数使用过 C/C++ 的人都对预处理器的工作原理有一定的直觉(或多或少)。直到今天我也是这么认为的,但事实证明我的直觉是错误的。故事是这样的: 今天我尝试了一些东西,但我无法解释结果。首先考虑
我想为 TnSettings 做 mock,是的,如果通过以下方法编写代码,它就可以工作,问题是我们需要为每个案例编写 mock 代码,如果我们只 mock 一次然后执行多个案例,那么第二个将报告异常
我的项目中有以下两个结构 typedef volatile struct { unsigned char rx_buf[MAX_UART_BUF]; //Input buffer over U
Regex rx = new Regex(@"[+-]"); string[] substrings = rx.Split(expression); expression = "-9a3dcb
我的两个应用程序遇到了一个奇怪的问题。这是设置: 两个 tomcat/java 应用程序,在同一个网络中运行,连接到相同的 MS-SQL-Server。一个应用程序,恰好按顺序位于 DMZ 中可从互联
我目前正在与 Android Api Lvl 8 上的 OnLongClickListener 作斗争。 拿这段代码: this.webView.setOnLongClickListener(new
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
只是遇到了奇怪的事情。我有以下代码: -(void)ImageDownloadCompleat { [self performSelectorOnMainThread:@selector(up
我是一名优秀的程序员,十分优秀!