IllegalArgumentException: 视图未附加到窗口管理器

3
我正在使用以下代码。当我从纵向方向更改为横向方向,然后再次更改为纵向方向时,会出现异常“视图未附加到窗口管理器”。 如何解决这个问题。 谢谢。
public class Search_List_Activity extends Activity{
public static String keyword=null, category_get_id;
public static ArrayList<String> type= new ArrayList<String>();
public static ArrayList<String> title= new ArrayList<String>();
public static ArrayList<String> des= new ArrayList<String>();
public static ArrayList<String> manu= new ArrayList<String>();
public static ArrayList<String> urls= new ArrayList<String>();
public static ArrayList<String> image_sm= new ArrayList<String>();
public static ArrayList<String> image_me= new ArrayList<String>();
public static ArrayList<String> image_la= new ArrayList<String>();
public static ArrayList<String> image_ex= new ArrayList<String>();
public static ArrayList<String> rel= new ArrayList<String>();
public static ArrayList<String> id= new ArrayList<String>();
public static ArrayList<String> cat_id= new ArrayList<String>();
public static ArrayList<String> min_price= new ArrayList<String>();
public static ArrayList<String> max_price= new ArrayList<String>();
public static ArrayList<String> stores= new ArrayList<String>();

public static ArrayList<String> offer_sku = new ArrayList<String>();
public static ArrayList<String> offer_detailurl = new ArrayList<String>();
public static ArrayList<String> offer_price = new ArrayList<String>();
public static ArrayList<String> offer_ori_price = new ArrayList<String>();
public static ArrayList<String> offer_markdownperct = new ArrayList<String>();
public static ArrayList<String> offer_shipcost = new ArrayList<String>();
public static ArrayList<String> offer_tax = new ArrayList<String>();
public static ArrayList<String> offer_total_price = new ArrayList<String>();
public static ArrayList<String> offer_bidded = new ArrayList<String>();
public static ArrayList<String> offer_merchant_prod_id = new ArrayList<String>();
public static ArrayList<String> offer_merchant_name = new ArrayList<String>();
public static ArrayList<String> offer_merchant_rating_img = new ArrayList<String>();
public static ArrayList<String> offer_merchant_logo = new ArrayList<String>();
public static ArrayList<String> offer_condition = new ArrayList<String>();
public static ArrayList<String> offer_stock = new ArrayList<String>();
public static ArrayList<String> offer_ship_amt = new ArrayList<String>();
public static ArrayList<String> offer_ship_type = new ArrayList<String>();
public static ArrayList<String> offer_id = new ArrayList<String>();
public static ArrayList<String> offer_cat_id = new ArrayList<String>();
public static ArrayList<String> offer_merchant_id = new ArrayList<String>();
public static ArrayList<String> category_id = new ArrayList<String>();
public static ArrayList<String> category_name = new ArrayList<String>();
public static ArrayList<String> offer_rating = new ArrayList<String>();
public static ArrayList<HashMap<String, Object>> mylist;
public static URL url1, url2;
public static JSONObject price;
public static String prod_type;
public static Boolean type_po;
public static Bitmap bmp;
 public static String prod_id;
 public static Boolean cat_flag;
static final int CATEGORIES_PRODUCE_ID = 0;
Dialog dialog_category;
 Bundle bundle;
 SQLiteDatabase db;
// TextView txt_search;
 private String lv_arr[]={"Cell Phone Cases","NCAA Shop","MLB Shop","NBA Shop","NFL Shop","MP3 Player Cases and Skins","iPhone Cases and Skins"};
 //ListView lv;
 public static Boolean flag=true; 
 Boolean flagValue = true;
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);


     //Getting the resolution of Tablet
    Display display = getWindowManager().getDefaultDisplay();
    int width = display.getWidth();
    int height = display.getHeight();
    System.out.println("Width:"+width);
    System.out.println("Height:"+height);

    //setContentView(R.layout.search_catagories);
        if(width==600 && height==1024)
               {
                   setContentView(R.layout.search_catagories);

                      System.out.println("HIiiiiiiiiiiiiii");


               }
        else{
                    flag = false;
                    setContentView(R.layout.search_categories_ls);
            }

        arraylists_clear();

    TextView txt_search = (TextView)findViewById(R.id.editText1);
    if(flagValue){
    if(SearchRefine.checkflag){
    bundle = getIntent().getExtras();
    keyword = bundle.getString("keyword");
    }
    image_sm.clear();
    title.clear();
    min_price.clear();
     //Opens or Create a database and Table
    db = openOrCreateDatabase("recentsearches1.db",SQLiteDatabase.CREATE_IF_NECESSARY,null);
    db.setVersion(1);
    db.setLocale(Locale.getDefault());
    db.setLockingEnabled(true);



    final String DATA="create table if not exists new_searchtab1("+"id INTEGER PRIMARY KEY AUTOINCREMENT,"+"search TEXT UNIQUE);";
    db.execSQL(DATA);
    //=================End

    ContentValues values = new ContentValues();
       values.put("search", keyword);
       long id1 = db.insert("new_searchtab1", null, values);

       db.close();

    }   
    //ArrayList<HashMap<String, Object>> mylist = new ArrayList<HashMap<String, Object>>();

    final ListView lv = (ListView)findViewById(R.id.search_listView);

    final ProgressDialog dialog = ProgressDialog.show(this, "BIZRATE", 



            "Loading....", true);
            final Handler handler = new Handler() {



               public void handleMessage(Message msg) {


                   //LoadEffAdapter();
                   lv.setAdapter(new EfficientAdapter(Search_List_Activity.this));
                   dialog.dismiss();
                  }
               };



            Thread checkUpdate = new Thread() {  



               public void run() {
            //
            // YOUR LONG CALCULATION (OR OTHER) GOES HERE
            //
                   SearchResult_Json.json_parsing();
                  handler.sendEmptyMessage(0);



                  }
               };
            checkUpdate.start();
    //final SearchResult_Json obj = new SearchResult_Json();
    ImageButton grid_view_btn = (ImageButton)findViewById(R.id.gridview_bttn);


    //Categories button
    Button categories_btn = (Button)findViewById(R.id.categories_bttn);
    categories_btn.setOnClickListener(new View.OnClickListener() {


        public void onClick(View v) {
            // TODO Auto-generated method stub
            Category_Search_Json.Json_parsing();
            showDialog(CATEGORIES_PRODUCE_ID);
        }
    });

    //Refine Button
    Button btn_refine = (Button)findViewById(R.id.refine_bttn);

    btn_refine.setOnClickListener(new View.OnClickListener() {



        public void onClick(View arg0) {


            //showDialog(SearchRefine.DIALOG_PRODUCE_ID);
            // TODO Auto-generated method stub
        Intent intent = new Intent(Search_List_Activity.this,SearchRefine.class);
        intent.putExtra("keyword",keyword);//Loads Refine Search Screen
        startActivity(intent);
        }

    });

    //Grid Button
    grid_view_btn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            //obj.json_parse();
            Intent intent = new Intent(Search_List_Activity.this,Search_GridView_Activity.class);
            intent.putExtra("keyword", bundle.getString("keyword"));
            startActivity(intent);
        }
    });


    txt_search.setText(keyword);
    keyword = keyword.replaceAll(" ", "+");
    System.out.println("The String:"+keyword);



    lv.setBackgroundColor(Color.WHITE);
    lv.setCacheColorHint(Color.WHITE); 


//List View On item click
    lv.setOnItemClickListener(new OnItemClickListener() {


        public void onItemClick(AdapterView<?> parent,View view,int position,long idddd)
        {

            //To check the offer and products
            if(type.get(position).equals("OFFER"))
            {
                prod_id = offer_id.get(position);
            Intent intent = new Intent(Search_List_Activity.this,Compare_Product_Activity.class);
            intent.putExtra("productType", "SZOID");
            startActivity(intent);
            }
            else
            {

                prod_id = offer_id.get(position);
                Intent intent = new Intent(Search_List_Activity.this,Compare_Product_Activity.class);
                intent.putExtra("productType", "SZPID");
                startActivity(intent);
            }

        }
    });
}



private void arraylists_clear() {
    // TODO Auto-generated method stub
    type.clear();
    image_sm.clear();
    title.clear();
    min_price.clear();
    des.clear();
    manu.clear();
    urls.clear();
    image_me.clear();
    image_la.clear();
    image_ex.clear();
    rel.clear();
    id.clear();
    cat_id.clear();
    min_price.clear();
    max_price.clear();
    stores.clear();
    offer_sku.clear();
    offer_detailurl.clear();
    offer_price.clear();
    offer_ori_price.clear();
    offer_markdownperct.clear();
    offer_shipcost.clear();
    offer_tax.clear();
    offer_total_price.clear();
    offer_bidded.clear();
    offer_merchant_prod_id.clear();
    offer_merchant_name.clear();
    offer_merchant_rating_img.clear();
    offer_merchant_logo.clear();
    offer_condition.clear();
    offer_stock.clear();
    offer_ship_amt.clear();
    offer_ship_type.clear();
    offer_id.clear();
    offer_cat_id.clear();
    offer_merchant_id.clear();
    category_id.clear();
    category_name.clear();
    offer_rating.clear();


}


/*protected void LoadEffAdapter() {
    // TODO Auto-generated method stub
    lv.setAdapter(new EfficientAdapter(this));

}
*/

//Loading of Images, title, min_price

//Efficient Adapter
public static class EfficientAdapter extends BaseAdapter {
    private LayoutInflater mInflater;

    public EfficientAdapter(Context context) {
        mInflater = LayoutInflater.from(context);

    }

    public int getCount() {
        return image_sm.size();
    }


    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        try {

            url1 = new URL(image_sm.get(position));
            url2 = new URL(image_me.get(position));
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        try {


            if(flag){
            bmp = BitmapFactory.decodeStream(url1.openConnection().getInputStream());
            }
            else{
                bmp = BitmapFactory.decodeStream(url2.openConnection().getInputStream());
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //holder.img.setImageBitmap(bmp);
        if (convertView == null) {


            if(flag){
            convertView = mInflater.inflate( R.layout.search_catagory_row, null);
            System.out.println("WITH PORTRAITTT");
            }
            else{
                convertView = mInflater.inflate( R.layout.search_category_row_land, null);
                System.out.println("WITH LANDSCAPEEE");
            }
            holder = new ViewHolder();
            holder.text = (TextView) convertView
            .findViewById(R.id.search_text);
            holder.text2 = (TextView) convertView
            .findViewById(R.id.text_view_2);
            holder.img = (ImageView) convertView.findViewById(R.id.images);

            convertView.setTag(holder);

        } else {

            holder = (ViewHolder) convertView.getTag();
        }


        holder.text.setText(title.get(position));
        holder.text2.setText(min_price.get(position));
        holder.img.setImageBitmap(bmp);
        final int pos = position;


        return convertView;
    }

    static class ViewHolder {
        TextView text;
        TextView text2;
        ImageView img;

    }
}


 @Override
    protected Dialog onCreateDialog(int id) {

        switch(id) {


       case CATEGORIES_PRODUCE_ID:
          dialog_category = new Dialog(this);
         dialog_category.setContentView(R.layout.category_dialog);
            ListView category_list= (ListView)dialog_category.findViewById(R.id.list_cat);
           category_list.setBackgroundColor(Color.WHITE);
          category_list.setCacheColorHint(Color.WHITE);
            category_list.setAdapter(new ArrayAdapter<String>(this,R.layout.cat_row, R.id.label , category_name));

            // List view click

           category_list.setOnItemClickListener(new OnItemClickListener() {


                public void onItemClick(AdapterView<?> parent,View view,int position,long idddd)
                {

                    //To check the offer and products
                    cat_flag=true;
                    SearchRefine.checkflag=false;
                    Intent intent = new Intent(Search_List_Activity.this,Search_List_Activity.class);
                    intent.putExtra("keyword",keyword);
                    category_get_id=category_id.get(position);
                    System.out.println("CATEGORY NAME-->"+category_get_id);
                    startActivity(intent);

                }
            });

           return dialog_category;  

        }
        return null;
    }    
}

它会产生以下异常。
06-07 16:39:12.660: ERROR/AndroidRuntime(986): FATAL EXCEPTION: main
06-07 16:39:12.660: ERROR/AndroidRuntime(986): java.lang.IllegalArgumentException: View not attached to window manager
06-07 16:39:12.660: ERROR/AndroidRuntime(986):     at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355)
06-07 16:39:12.660: ERROR/AndroidRuntime(986):     at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:200)
06-07 16:39:12.660: ERROR/AndroidRuntime(986):     at android.view.Window$LocalWindowManager.removeView(Window.java:432)
06-07 16:39:12.660: ERROR/AndroidRuntime(986):     at android.app.Dialog.dismissDialog(Dialog.java:278)
06-07 16:39:12.660: ERROR/AndroidRuntime(986):     at android.app.Dialog.access$000(Dialog.java:71)
06-07 16:39:12.660: ERROR/AndroidRuntime(986):     at android.app.Dialog$1.run(Dialog.java:111)
06-07 16:39:12.660: ERROR/AndroidRuntime(986):     at android.app.Dialog.dismiss(Dialog.java:268)
06-07 16:39:12.660: ERROR/AndroidRuntime(986):     at org.bizrate.tablet.Search_List_Activity$1.handleMessage(Search_List_Activity.java:174)
06-07 16:39:12.660: ERROR/AndroidRuntime(986):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-07 16:39:12.660: ERROR/AndroidRuntime(986):     at android.os.Looper.loop(Looper.java:123) 
06-07 16:39:12.660: ERROR/AndroidRuntime(986):     at android.app.ActivityThread.main(ActivityThread.java:4627)
06-07 16:39:12.660: ERROR/AndroidRuntime(986):     at java.lang.reflect.Method.invokeNative(Native Method)
06-07 16:39:12.660: ERROR/AndroidRuntime(986):     at java.lang.reflect.Method.invoke(Method.java:521)
06-07 16:39:12.660: ERROR/AndroidRuntime(986):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-07 16:39:12.660: ERROR/AndroidRuntime(986):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-07 16:39:12.660: ERROR/AndroidRuntime(986):     at dalvik.system.NativeStart.main(Native Method)

大家好,我想在这里补充一点内容,当我从这段代码中删除线程代码(进度条代码)时,它可以完美地运行。但是我必须要实现进度条,请帮帮我。 谢谢大家。


设置断点以找出代码在哪一行出错。然后请告诉我们。另外,请格式化您的代码。 - Shraddha Shravagi
这是你能提供的全部代码吗?拜托了,求你了,再提供一些代码吧!我需要一些代码!代码代码!(结束讽刺) - WarrenFaith
Search_List_Activity.java文件的第174行有什么内容? - Tanmay Mandal
谢谢大家的回复。在第174行中,它有一个listview适配器。@WarrenFaith:我已经分享了这个活动的整个代码。 - Himanshu
由于你没有理解我的讽刺,能否将代码减少到只包含第174行的方法?这次不是讽刺:我在你的代码中不计算174行... 移除不必要的代码! - WarrenFaith
1个回答

5

这个问题已经被多次解答过了...当您更改设备方向时,Activity会再次创建。

为了解决这个问题,请在您的Activity中使用以下代码,并在您的清单文件中进行配置。

android:configChanges="keyboardHidden|orientation" 

谢谢Sujit,但是这段代码只适用于活动只有一个布局的情况。但是我有不同方向的不同布局。感谢您的回复。 - Himanshu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接