gpt4 book ai didi

android - 滚动时 ListView 的奇怪行为

转载 作者:行者123 更新时间:2023-11-29 14:05:42 24 4
gpt4 key购买 nike

IMAGE URL ---> Please click

enter image description here

我正在创建一个 ListView,它有一个 TextView 和一个 ProgressBarProgressBar 最初处于不可见状态。我正在为包含 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com