gpt4 book ai didi

android - 如何从 AsyncTask 向布局添加 View

转载 作者:行者123 更新时间:2023-11-29 14:49:54 26 4
gpt4 key购买 nike

基于用户输入,我在循环中将许多 TextView 动态添加到相关布局。

问题在于,随着电视数量的增加,构建布局所需的时间也会增加,以至于用户会收到“等待/强制关闭”消息。

我知道这是因为在主 UI 线程上,但据我所知我不能将 View 异步添加到布局中,在 doInBackground 中说“只有创建 View 层次结构的原始线程才能触及它的 View ”错误。

每个新电视都在循环中计算的前一个电视的右侧或下方,因此我无法将 addview 语句移动到 AsyncTask onPostExecute 中。

有没有办法在使用 AsyncTask 时在 for 循环中将 tvs 添加到布局?

这是需要做的:

public class LoadData extends AsyncTask<Void, Void, Void> {

protected void onPreExecute(){ ....

protected Void doInBackground(Void... params){ ...

while (yCoord + CellSizeH < b2.getHeight()) {
while (xCoord + CellSizeW < b2.getWidth() ) {

tv = new TextView(this);
tv.setTextSize(DisplayCellSizeH * 0.5f);
tv.setWidth(DisplayCellSizeW);
tv.setHeight(DisplayCellSizeH);
tv.setOnClickListener(new View.OnClickListener() {...
}

//this will error so needs to be in onPostExecute
thelayout.addView(tv, params1);
}
}


protected void onPostExecute(Void result){ ...

希望这是有道理的。谢谢

最佳答案

这就是ListViews是给。放入自定义适配器即可。本质上,表格中的每一行将仅加载使其正常工作所需的内容。

本质上,ListView 是您的容器,您创建一个适配器来适本地填充数据。您将自定义适配器添加到 ListView,然后就可以了。这是适配器的简单布局。

public class CustomAdapter extends BaseAdapter {

public CustomAdapter (Context c) {
}

public int getCount() {
/Number of rows
}

public Object getItem(int position) {
//Probably not required for your applications
}

public long getItemId(int position) {
//Probably not required for your applications
}

public View getView(int position, View convertView, ViewGroup parent) {
//Create a view here, and return it.
}
}

关于android - 如何从 AsyncTask 向布局添加 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21798286/

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