android错误只有创建视图层次结构的原始线程才能触及其视图

时间:2015-08-10 18:28:30

标签: android android-listview android-runonuithread

我的班级名称Main1获得了图像链接数组&主类中的文本数组,并在listview上显示。我得到错误“只有创建视图层次结构的原始线程可以触摸其视图”所以我搜索解决方案我发现我使用runOnUithread但它只能在oncreate上使用所以我不要我知道这是解决方案。 is是从main1类获取

main1类是

public class Main1 extends ArrayAdapter<String> {

private final Activity context;
private final String[] Cat_Name;
private final String[] logo;
public Main1(Activity context,String[] Cat_Name, String[] logo) {
super(context, R.layout.main1, Cat_Name);
this.context = context;
this.Cat_Name = Cat_Name;
this.logo = logo;
}
@Override

public View getView(final int position, View convertView, ViewGroup parent) {





    LayoutInflater inflater = context.getLayoutInflater();
    View rowView= inflater.inflate(R.layout.main1, null, true);
    TextView txtTitle = (TextView) rowView.findViewById(R.id.textView1);


    final ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView1);
    txtTitle.setText(Cat_Name[position]);


    Thread thread = new Thread() {
        @Override
        public void run() {
            try {


                                    String img_url=logo[position]; //url of the image
        //      System.out.println(img_url);
                URL url = new URL(img_url);
                final Bitmap bmp; 
                bmp=BitmapFactory.decodeStream(url.openConnection().getInputStream());
                        imageView.setImageBitmap(bmp);


            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


        }
    };


    thread.start();



    return rowView;

}



}

1 个答案:

答案 0 :(得分:0)

在runOnUiThread方法中设置您的图像,如下所示

  ((Activity) context).runOnUiThread(new Runnable() {
        @Override
        public void run() {
            imageView.setImageBitmap(bmp);
        }
    });

希望有所帮助。