如何将其添加到android中的Async任务中。该视图占据了大部分主线程,所以我试图把它放在新的线程中。
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = new ViewHolder();
convertView = inflater.inflate(R.layout.gridview_layout, null);
holder.txt = (TextView) convertView.findViewById(R.id.txt);
holder.flag = (ImageView) convertView.findViewById(R.id.flag);
holder.txt.setText(result[position]);
holder.flag.setImageResource(imageId[position]);
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, DetailActivity.class).putExtra(Intent.EXTRA_TEXT, result[position]);
context.startActivity(intent);
}
});
return convertView;
}
另一个班级是这样的。我不明白什么是主线程的大部分用途
public static class DetailFragment extends Fragment {
public DetailFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_detail, container, false);
Intent intent = getActivity().getIntent();
if (intent != null && intent.hasExtra(Intent.EXTRA_TEXT)) {
String forecastStr = intent.getStringExtra(Intent.EXTRA_TEXT);
((TextView) rootView.findViewById(R.id.detail_text)).setText(forecastStr);
}
return rootView;
}
}
答案 0 :(得分:0)
你错了,因为UI的大多数操作应该在主线程上(并且更新UI应该总是在主线程上)。
可能还有另一个代码占用了大部分主线程(URL请求,从磁盘加载文件,数据解析等)。
但这是AsyncTask用法的一个例子:
AsyncTask.execute(new Runnable() {
@Override
public void run() {
//code here
}
});
答案 1 :(得分:0)
您没有正确使用ViewHolder模式。
ViewHolder模式的想法是限制布局膨胀的数量和昂贵的操作,如findViewById()
。您的实现完全忽略convertView
并每次都为新布局充气!
如果您的布局很复杂,这可能会导致性能受到明显影响。
更好的实施方式是:
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView != null) {
holder = (ViewHolder) convertView.getTag();
}
else {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.gridview_layout, parent, false);
holder.txt = (TextView) convertView.findViewById(R.id.txt);
holder.flag = (ImageView) convertView.findViewById(R.id.flag);
convertView.setTag(holder);
}
holder.txt.setText(result[position]);
holder.flag.setImageResource(imageId[position]);
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, DetailActivity.class).putExtra(Intent.EXTRA_TEXT, result[position]);
context.startActivity(intent);
}
});
return convertView;
}
您还应该考虑使用ListView.setOnItemClickListener()
而不是为列表中的每个项目创建新的OnClickListener
。