碎片在横向模式下崩溃

时间:2013-11-12 08:21:37

标签: android

在我的应用程序中,我有标签并且与片段相关。我的应用程序在potrait模式下正常工作但是当我将方向更改为横向模式应用程序正在崩溃。

我该怎么做才能使我的应用在两个方向都能正常运行。

这是我的主要活动:

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class MainActivity extends  Activity {       


    public MainActivity() {
        super();
        // TODO Auto-generated constructor stub
    }


    RelativeLayout rl;    

    PopupWindow popUp;
    LinearLayout layout;
    TextView tv;
    LayoutParams params;
    LinearLayout mainLayout;
    Button but;
    boolean click = true;

    ActionBar.Tab TabOrder , TabCart,TabHistory,TabDeals;


    private String settingfirstname;


    private List<SettingDetail> settinglistdetail;

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    @SuppressLint("NewApi")
    @Override
    public void onCreate(Bundle savedInstanceState) {

        setContentView(R.layout.activity_main);

        getOverflowMenu();


        rl = (RelativeLayout) findViewById(R.id.mainLayout);

        ActionBar actionbar = getActionBar();
        actionbar.setTitle("Select To Order");
        actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        TabDeals = actionbar.newTab().setText("DEALS");
        TabOrder = actionbar.newTab().setText("ORDER");
        TabCart = actionbar.newTab().setText("CART");
        TabHistory = actionbar.newTab().setText("HISTORY");


        Fragment FragmentDeals = new FragmentDeals();
        Fragment FragmentOrder = new FragmentOrder();
        Fragment FragmentCart = new FragmentCart();
        Fragment FragmentHistory = new FragmentHistory();


        TabDeals.setTabListener(new MyTablistenerClass(FragmentDeals));
        TabOrder.setTabListener(new MyTablistenerClass(FragmentOrder));
        TabCart.setTabListener(new MyTablistenerClass(FragmentCart));
        TabHistory.setTabListener(new MyTablistenerClass(FragmentHistory));


        actionbar.addTab(TabDeals);
        actionbar.addTab(TabOrder);
        actionbar.addTab(TabCart);
        actionbar.addTab(TabHistory);


        //      //for pop up window
        //      AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
        //              MainActivity.this);
        //
        //      // set title
        //      //alertDialogBuilder.setTitle("Your Title");
        //
        //      // set dialog message
        //      alertDialogBuilder
        //      .setMessage("Do You want to switch to Scan using QR code?")
        //      .setCancelable(false)
        //      .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
        //          public void onClick(DialogInterface dialog,int id) {
        //              // if this button is clicked, close
        //              // current activity
        //              MainActivity.this.finish();
        //          }
        //      })
        //      .setNegativeButton("No",new DialogInterface.OnClickListener() {
        //          public void onClick(DialogInterface dialog,int id) {
        //              // if this button is clicked, just close
        //              // the dialog box and do nothing
        //              dialog.cancel();
        //          }
        //      });
        //
        //      // create alert dialog
        //      AlertDialog alertDialog = alertDialogBuilder.create();
        //
        //      // show it
        //      alertDialog.show();


        //      FragmentOrder Fram1;
        //      FragmentHistory Fram2;

        DatabaseManager db = new DatabaseManager(MainActivity.this);

        settinglistdetail = db.getAllSettingsDetailfirstname();

        for (SettingDetail d : settinglistdetail) {

            settingfirstname = d.getFirstname();

        }

        Toast.makeText(MainActivity.this, "settingfirstname : " + settingfirstname, Toast.LENGTH_LONG).show();




        //DatabaseManager db = new DatabaseManager(MainActivity.this);

        ProductDetail p = new ProductDetail();
        p.setProductid(001);
        p.set_name("abc");
        p.setImage(null);
        p.setPrice(123);
        p.setQuantity(2);
        //db.insertProductDetail(p);


        ProductDetail p1 = new ProductDetail();
        p1.setProductid(002);
        p1.set_name("xyz");
        p1.setImage(null);
        p1.setPrice(345);
        p1.setQuantity(2);
        //db.insertProductDetail(p1);


        ProductDetail p2 = new ProductDetail();
        p2.setProductid(003);
        p2.set_name("ghi");
        p2.setImage(null);
        p2.setPrice(678);
        p2.setQuantity(2);
        //db.insertProductDetail(p2);



        ProductDetail p3 = new ProductDetail();
        p3.setProductid(004);
        p3.set_name("mno");
        p3.setImage(null);
        p3.setPrice(789);
        p3.setQuantity(2);
        //db.insertProductDetail(p3);




        ScanId i = new ScanId();
        i.setScanid(1);
        //db.insertScanId(i);


        SettingDetail s1 = new SettingDetail();
        s1.setFirstname("sweety");
        s1.setLastname("yede");
        s1.setPhonenumber(957983914);
        s1.setEmailaddress("sweety.yede@gmail.com");
        s1.setAddressline1("flatno.1");
        s1.setAddressline2("wadgaonsheri");
        s1.setLocality("WadgaonSheri");
        s1.setCity("Pune");
        s1.setPincode(411056);
        //db.insertSettingsDetail(s1);

        SettingDetail s2 = new SettingDetail();
        s2.setFirstname("priti");
        s2.setLastname("yede");
        s2.setPhonenumber(957983914);
        s2.setEmailaddress("sweety.yede@gmail.com");
        s2.setAddressline1("flatno.1");
        s2.setAddressline2("wadgaonsheri");
        s2.setLocality("WadgaonSheri");
        s2.setCity("Pune");
        s2.setPincode(411056);
        //db.insertSettingsDetail(s2);

        SettingDetail s3 = new SettingDetail();
        s3.setFirstname("nikhil");
        s3.setLastname("waghaye");
        s3.setPhonenumber(957983914);
        s3.setEmailaddress("sweety.yede@gmail.com");
        s3.setAddressline1("flatno.1");
        s3.setAddressline2("wadgaonsheri");
        s3.setLocality("WadgaonSheri");
        s3.setCity("Pune");
        s3.setPincode(411056);
        //db.insertSettingsDetail(s3);





        init();

        super.onCreate(savedInstanceState);
    }

    public void init() {
        // TODO Auto-generated method stub

    }

    public void getOverflowMenu() {

        try {
            ViewConfiguration config = ViewConfiguration.get(this);
            Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
            if(menuKeyField != null) {
                menuKeyField.setAccessible(true);
                menuKeyField.setBoolean(config, false);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    @SuppressLint({ "ValidFragment", "NewApi" })
    public class FragmentOrder extends Fragment{


        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            //View view = inflater.inflate(R.layout.g, null);
            View view = inflater.inflate(R.layout.gridview,null);
            final GridView listView = (GridView) view.findViewById(R.id.mainGrid);
            listView.setAdapter(new OrderAdapter());
            //listView.setSelection(setselected,true);
            //          listView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);
            //
            //          listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
            //
            //
            //              @Override
            //              public boolean onActionItemClicked(ActionMode mode,
            //                      MenuItem item) {
            //                  // TODO Auto-generated method stub
            //                  return true;
            //              }
            //
            //              @Override
            //              public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            //                  mode.setTitle("Select Items");
            //                  mode.setSubtitle("One item selected");
            //                  return true;
            //
            //              }
            //
            //              @Override
            //              public void onDestroyActionMode(ActionMode mode) {
            //                  // TODO Auto-generated method stub
            //
            //              }
            //
            //              @Override
            //              public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            //                  // TODO Auto-generated method stub
            //                  return false;
            //              }
            //
            //              @Override
            //              public void onItemCheckedStateChanged(ActionMode mode,
            //                      int position, long id, boolean checked) {
            //
            //                  //listView.setLongClickable(false);
            //                  int selectCount = listView.getCheckedItemCount();
            //                  switch (selectCount) {
            //                  case 1:
            //                      mode.setSubtitle("One item selected");
            //                      break;
            //                  default:
            //                      mode.setSubtitle("" + selectCount +"items selected");
            //                      break;


            listView.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,
                        int arg2, long arg3) {
                    // TODO Auto-generated method stub

                }
            });



            return view;
        }
    }



    public class OrderAdapter extends BaseAdapter {


        @Override
        public int getCount() {
            return mThumbIds.length;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }

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

            //CheckableLayout l;

            View myView = convertView;

            LayoutInflater inflater = (LayoutInflater)MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);          
            myView = inflater.inflate(R.layout.grid_items_ontap, null);


            // Add The Image!!!           
            ImageView iv = (ImageView)myView.findViewById(R.id.grid_item_image_OnTap);
            iv.setImageResource(mThumbIds[position]);


            // Add The Text!!!
            TextView tv = (TextView)myView.findViewById(R.id.grid_item_text_onTap);
            tv.setText(names[position] );

            return myView;
        }
    }



    private Integer[] mThumbIds = {
            R.drawable.car, R.drawable.car,
            R.drawable.car, R.drawable.car,
            R.drawable.car
    };

    private String[] names={"Vegetable","Fruits","Groceries","ij","kl"};




    @SuppressLint("ValidFragment")
    public class FragmentHistory extends Fragment{



        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {


            View layout = inflater.inflate(R.layout.activity_fragmenthistory,   
                    (ViewGroup)  
                    findViewById(R.id.layout_root_history));   


            ListView lv = (ListView) layout.findViewById(R.id.listViewHistory); 
            lv.setAdapter(new HistoryListViewAdapter(MainActivity.this));  

            lv.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> arg0, View view, int position,
                        long id) {
                    // TODO Auto-generated method stub

                    AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this);


                    dlg.setTitle("ORDERID");

                    dlg.setPositiveButton("REORDER",new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // TODO Auto-generated method stub
                        }

                    })

                    .setNegativeButton("EDIT AND ORDER", new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // TODO Auto-generated method stub

                        }
                    });

                    ListView listView = new ListView(MainActivity.this);

                    listView.setAdapter(new DialogListAdapter(MainActivity.this));

                    dlg.setView(listView);



                    //((Dialog) dlg).setCanceledOnTouchOutside(true);
                    // show it
                    dlg.show();



                }

            }); 


            return layout;
        }
    }


    @SuppressLint("ValidFragment")
    public class FragmentCart extends Fragment{

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View layout = inflater.inflate(R.layout.activity_fragmentcart,   
                    (ViewGroup)  
                    findViewById(R.id.layout_root_cart));   


            ListView lv = (ListView) layout.findViewById(R.id.listViewCart); 
            lv.setAdapter(new CartListViewAdapter(MainActivity.this));

            //lv.invalidateViews();
            //          ActionBar actionBar = getActionBar();
            //           setHasOptionsMenu(true);
            //           actionBar = ((ActionBarActivity)getActivity()).getSupportActionBar();
            return layout;
        }

    }


    @SuppressLint("ValidFragment")
    public class FragmentDeals extends Fragment implements Checkable{

        private boolean mChecked;


        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {

            View layout = inflater.inflate(R.layout.fragmentdeal,   
                    (ViewGroup)  
                    findViewById(R.id.layoutdeal));   


            //View view = inflater.inflate(R.layout.griddeal,null);
            final GridView mGrid = (GridView) layout.findViewById(R.id.GridDeal);
            mGrid.setAdapter(new DealAdapter());

            mGrid.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);

            mGrid.setMultiChoiceModeListener(new MultiChoiceModeListener() {


                @Override
                public boolean onActionItemClicked(ActionMode mode,
                        MenuItem item) {
                    // TODO Auto-generated method stub
                    return true;
                }

                @Override
                public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                    mode.setTitle("Select Items");
                    mode.setSubtitle("One item selected");
                    return true;

                }

                @Override
                public void onDestroyActionMode(ActionMode mode) {
                    // TODO Auto-generated method stub

                }

                @Override
                public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                    // TODO Auto-generated method stub
                    return false;
                }

                @Override
                public void onItemCheckedStateChanged(ActionMode mode,
                        int position, long id, boolean checked) {

                    //listView.setLongClickable(false);
                    int selectCount = mGrid.getCheckedItemCount();
                    switch (selectCount) {
                    case 1:
                        mode.setSubtitle("One item selected");
                        break;
                    default:
                        mode.setSubtitle("" + selectCount +"items selected");
                        break;

                    }
                }
            });



            return layout;
            // TODO Auto-generated method stub

        }


        @Override
        public boolean isChecked() {
            // TODO Auto-generated method stub
            return mChecked;
        }

        @SuppressWarnings("deprecation")
        @Override
        public void setChecked(boolean checked) {
            // TODO Auto-generated method stub
            mChecked = checked;


            layout.setBackgroundDrawable(checked ? getResources().getDrawable(
                    R.drawable.bground) : null);

        }

        @Override
        public void toggle() {
            // TODO Auto-generated method stub
            setChecked(!mChecked);

        }
    }

    private class DealAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return mThumbIds1.length;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }

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

            //CheckableLayout l;

            View myView = convertView;

            LayoutInflater inflater = (LayoutInflater)MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);          
            myView = inflater.inflate(R.layout.griddealitems, null);


            // Add The Image!!!           
            ImageView iv = (ImageView)myView.findViewById(R.id.grid_deal_image);
            iv.setImageResource(mThumbIds1[position]);


            // Add The Text!!!
            TextView tv = (TextView)myView.findViewById(R.id.grid_deal_text);
            tv.setText(names1[position] );




            return myView;
        }


        private Integer[] mThumbIds1= {
                R.drawable.car, R.drawable.car,
                R.drawable.car, R.drawable.car,
                R.drawable.car,R.drawable.car,R.drawable.car,R.drawable.car, R.drawable.car,
                R.drawable.car, R.drawable.car,
                R.drawable.car,R.drawable.car,R.drawable.car
        };

        private String[] names1={"ab","cd","ef","gh","ij","kl","mn","","","","","","",""};

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        return true;

        //        if (menu.getItemId()==FragmentCart) {
        //              //Log.e(TAG, " - onCreateOPTIONMenu");        
        //              inflater.inflate(R.menu.fragmentcart, menu);
        //              MenuItem cancel  = menu.findItem(R.id.cancel_booking_accepted);
        //              //cancel.getIcon().setAlpha(Constants.ENABLED_OPACITY);
        //              //menu.findItem(R.id.my_trips_switch).getIcon().setAlpha(Constants.ENABLED_OPACITY);
        //          }
    }


    public boolean onOptionsItemSelected(MenuItem item){

        switch(item.getItemId()){
        case R.id.action_settings:
            Intent intentForSettings = new Intent(MainActivity.this, SettingsMenu.class);
            startActivity(intentForSettings);
            return true;

        case R.id.action_info:
            Intent intentForInformation = new Intent(MainActivity.this,InformationMenu.class);
            startActivity(intentForInformation);
            return true;

        case R.id.action_ContactUs:
            Intent dial = new Intent();
            String no =  "9579839314";
            dial.setAction("android.intent.action.DIAL");
            dial.setData(Uri.parse("tel:"+ no));
            startActivity(dial); 
            return true;

        }
        return false;

    }


    public class MyTablistenerClass implements android.app.ActionBar.TabListener {

        Fragment fragment1;

        @SuppressLint("NewApi")
        public MyTablistenerClass(Fragment fragment){
            this.fragment1 = fragment;
        }


        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub

        }
        @SuppressLint("NewApi")
        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub


            FragmentTransaction fragMentTra;
            if (tab.getText().equals("DEALS")) {
                try {
                    rl.removeAllViews();
                } catch (Exception e) {
                }

                ActionBar actionBar = getActionBar();
                actionBar.show();
                actionBar.setTitle("Deals");

                FragmentDeals Fram1 = new FragmentDeals();
                //fragMentTra.addToBackStack(null);
                fragMentTra = getFragmentManager().beginTransaction();
                fragMentTra.add(rl.getId(), Fram1);
                fragMentTra.commit();
            }
            else if (tab.getText().equals("ORDER")) {
                try {
                    rl.removeAllViews();
                } catch (Exception e) {
                }

                ActionBar actionBar = getActionBar();
                actionBar.show();
                actionBar.setTitle("Select Category");

                //actionBar.setIcon(R.id.search);
                FragmentOrder Fram2 = new FragmentOrder();
                //fragMentTra.addToBackStack(null);
                fragMentTra = getFragmentManager().beginTransaction();
                fragMentTra.add(rl.getId(), Fram2);
                fragMentTra.commit();
            }

            else if(tab.getText().equals("CART")){
                try {
                    rl.removeAllViews();
                } catch (Exception e) {
                }

                ActionBar actionBar = getActionBar();
                actionBar.show();
                actionBar.setTitle("Shopping Cart");
                FragmentCart fram3 = new FragmentCart();
                //fragMentTra.addToBackStack(null);
                fragMentTra = getFragmentManager().beginTransaction();
                fragMentTra.add(rl.getId(), fram3);
                fragMentTra.commit();
            }


            else if(tab.getText().equals("HISTORY")){
                try {
                    rl.removeAllViews();
                } catch (Exception e) {
                }
                ActionBar actionBar = getActionBar();
                actionBar.show();
                actionBar.setTitle("History");
                FragmentHistory fram4 = new FragmentHistory();
                //fragMentTra.addToBackStack(null);
                fragMentTra = getFragmentManager().beginTransaction();
                fragMentTra.add(rl.getId(), fram4);
                fragMentTra.commit();
            }

        }

        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {

        }

    }
}

这是我得到的错误。

11-12 14:06:06.700: E/AndroidRuntime(27733): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.scantoorder1/com.example.scantoorder1.MainActivity}: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.example.scantoorder1.MainActivity$FragmentDeals: make sure class name exists, is public, and has an empty constructor that is public
11-12 14:06:06.700: E/AndroidRuntime(27733):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2355)
11-12 14:06:06.700: E/AndroidRuntime(27733):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2391)

感谢。

1 个答案:

答案 0 :(得分:4)

在你的清单中尝试这个..

     <activity               
         android:name="YourActivityName"   
         android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
         android:windowSoftInputMode="adjustPan">
     </activity>