android:我如何设置回Tab按Tab键?哪个标签只包含两个活动?

时间:2013-05-13 10:14:00

标签: android tabs activitygroup

  • 我尝试在offerDetails的backpress上调用我的OffersActivity Activity。(我正在使用ActivityGroup和TabActivity)。
  • 我收到了ArrayIndexOutOFBound的错误...最后两个我试着 这完成但我没有完成..指导我..解决这个问题 问题。当我运行第一个标签时,这个是的活动是打开List 当我点击列表项打开其详细信息视图 (OfferDetailsActivity)并按返回它会给出错误强制关闭..

    我应用此示例: - http://www.jtben.com/document/695851

    但它会给出错误05-15 10:35:00.755: E/AndroidRuntime(279): FATAL EXCEPTION: main 05-15 10:35:00.755: E/AndroidRuntime(279): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1 05-15 10:35:00.755: E/AndroidRuntime(279): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257) 05-15 10:35:00.755: E/AndroidRuntime(279): at java.util.ArrayList.remove(ArrayList.java:406) 05-15 10:35:00.755: E/AndroidRuntime(279): at com.wae.saterra.view.OffersActivity.back(OffersActivity.java:149) 05-15 10:35:00.755: E/AndroidRuntime(279): at com.wae.saterra.view.OffersActivity.onBackPressed(OffersActivity.java:173) 05-15 10:35:00.755: E/AndroidRuntime(279): at android.app.Activity.onKeyUp(Activity.java:1888) 05-15 10:35:00.755: E/AndroidRuntime(279): at android.view.KeyEvent.dispatch(KeyEvent.java:1061) 05-15 10:35:00.755: E/AndroidRuntime(279): at android.app.Activity.dispatchKeyEvent(Activity.java:2068) 05-15 10:35:00.755: E/AndroidRuntime(279): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1643) 05-15 10:35:00.755: E/AndroidRuntime(279): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788) 05-15 10:35:00.755: E/AndroidRuntime(279): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788) 05-15 10:35:00.755: E/AndroidRuntime(279): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788) 05-15 10:35:00.755: E/AndroidRuntime(279): at android.widget.TabHost.dispatchKeyEvent(TabHost.java:275) 05-15 10:35:00.755: E/AndroidRuntime(279): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788) 05-15 10:35:00.755: E/AndroidRuntime(279): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788) 05-15 10:35:00.755: E/AndroidRuntime(279): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788) 05-15 10:35:00.755: E/AndroidRuntime(279): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788) 05-15 10:35:00.755: E/AndroidRuntime(279): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1667) 05-15 10:35:00.755: E/AndroidRuntime(279): at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1102) 05-15 10:35:00.755: E/AndroidRuntime(279): at android.app.Activity.dispatchKeyEvent(Activity.java:2063) 05-15 10:35:00.755: E/AndroidRuntime(279): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1643) 05-15 10:35:00.755: E/AndroidRuntime(279): at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2471) 05-15 10:35:00.755: E/AndroidRuntime(279): at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2441) 05-15 10:35:00.755: E/AndroidRuntime(279): at android.view.ViewRoot.handleMessage(ViewRoot.java:1735) 05-15 10:35:00.755: E/AndroidRuntime(279): at android.os.Handler.dispatchMessage(Handler.java:99) 05-15 10:35:00.755: E/AndroidRuntime(279): at android.os.Looper.loop(Looper.java:123) 05-15 10:35:00.755: E/AndroidRuntime(279): at android.app.ActivityThread.main(ActivityThread.java:4627) 05-15 10:35:00.755: E/AndroidRuntime(279): at java.lang.reflect.Method.invokeNative(Native Method) 05-15 10:35:00.755: E/AndroidRuntime(279): at java.lang.reflect.Method.invoke(Method.java:521) 05-15 10:35:00.755: E/AndroidRuntime(279): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 05-15 10:35:00.755: E/AndroidRuntime(279): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 05-15 10:35:00.755: E/AndroidRuntime(279): at dalvik.system.NativeStart.main(Native Method)

    我的代码:

    • TabActivity

      '
      

      扩展TabActivity {         TabHost tabHost;

          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.sattera_tab_activity);
              tabHost = getTabHost();
              init();
      
          }
      
          private void init() {
              Intent intent;
              intent=new Intent().setClass(this, OffersActivity.class);
              tabHost.addTab(tabHost
                      .newTabSpec("OffersActivity")
                      .setIndicator("OffersActivity",
                              getResources().getDrawable(R.drawable.ic_prominent))
                      .setContent(intent));
      
      
      
      //      tabHost.addTab(tabHost.newTabSpec(null)
      //              .setIndicator(null, getResources().getDrawable(R.drawable.ic_prominent))
      //              .setContent(new Intent(this,OffersActivity.class)));
              tabHost.addTab(tabHost.newTabSpec(null)
                      .setIndicator(null, getResources().getDrawable(R.drawable.ic_products))
                      .setContent(new Intent(this,ProductsActivity.class)));
              tabHost.addTab(tabHost.newTabSpec(null)
                      .setIndicator(null, getResources().getDrawable(R.drawable.ic_service_ol))
                      .setContent(new Intent(this,ServiceActivity.class)));
              tabHost.addTab(tabHost.newTabSpec(null)
                      .setIndicator(null, getResources().getDrawable(R.drawable.ic_tenda_ol))
                      .setContent(new Intent(this,TendaOLActivity.class)));
              tabHost.addTab(tabHost.newTabSpec(null)
                      .setIndicator(null, getResources().getDrawable(R.drawable.ic_notify))
                      .setContent(new Intent(this,ContactUsActivity.class)));
              //int currentTab = getIntent().getExtras().getInt(OffersActivity.TAB_ID);
              tabHost.setCurrentTab(0);
      //      Intent intent;
      //      intent=new Intent().setClass(this, OffersActivity.class);
      //      tabHost.addTab(tabHost
      //              .newTabSpec(null)
      //              .setIndicator(null,
      //                      getResources().getDrawable(R.drawable.ic_prominent))
      //              .setContent(intent));
      //      intent=new Intent().setClass(this, ProductsActivity.class);
      //      tabHost.addTab(tabHost
      //              .newTabSpec(null)
      //              .setIndicator(null,
      //                      getResources().getDrawable(R.drawable.ic_products))
      //              .setContent(intent));
      //      intent=new Intent().setClass(this, ServiceActivity.class);
      //      tabHost.addTab(tabHost
      //              .newTabSpec(null)
      //              .setIndicator(null,
      //                      getResources().getDrawable(R.drawable.ic_service_ol))
      //              .setContent(intent));
      //      intent=new Intent().setClass(this, TendaOLActivity.class);
      //      tabHost.addTab(tabHost
      //              .newTabSpec(null)
      //              .setIndicator(null,
      //                      getResources().getDrawable(R.drawable.ic_tenda_ol))
      //              .setContent(intent));
      //      intent=new Intent().setClass(this, ContactUsActivity.class);
      //      tabHost.addTab(tabHost
      //              .newTabSpec(null)
      //              .setIndicator(null,
      //                      getResources().getDrawable(R.drawable.ic_notify))
      //              .setContent(intent));
      //
      //      tabHost.setCurrentTab(2);
      //   
      

      }

    }“

  • 1)OffersActivity

    'public class OffersActivity extends ActivityGroup implements
        OnItemClickListener {
    
    CustomArrayAdapter adapter;
    ListView lvProducts;
    ArrayList<Products> productObj;
    Products product;
    public static OffersActivity group;
    
    private ArrayList<View> history;
    
    // View rootView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.product_list);
    
        this.history = new ArrayList<View>();
        group = this;
    
        init();
        // hideFB();
        // hideTwitter();
        setTitle(getResources().getString(R.string.title_offer));
        // API Call
    
        if (Global.isNetworkAvailable(OffersActivity.this)) {
            new ProductAsyncTask().execute(Constants.url);
        } else {
            Intent intent = new Intent(OffersActivity.this,
                    OfflineActivity.class);
            startActivity(intent);
    
            // AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
            // this);
            //
            // // set title
            // alertDialogBuilder.setTitle("No Internet Connection Available  ");
            //
            // // set dialog message
            // alertDialogBuilder
            // .setMessage("Click yes to exit!")
            // .setCancelable(false)
            // .setPositiveButton("Yes",
            // new DialogInterface.OnClickListener() {
            // public void onClick(DialogInterface dialog,
            // int id) {
            // Intent intent = new Intent(
            // OffersActivity.this,
            // OffersActivity.class);
            // startActivity(intent);
            //
            // }
            // });
            //
            // AlertDialog alertDialog = alertDialogBuilder.create();
            // // show it
            // alertDialog.show();
        }
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        if (adapter != null) {
            adapter.notifyDataSetChanged();
        }
    }
    
    private void init() {
        productObj = new ArrayList<Products>();
        lvProducts = (ListView) findViewById(R.id.lv_products);
        lvProducts.setOnItemClickListener(this);
    }
    
    @Override
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    
    
            Intent intent = new Intent(OffersActivity.this,
                    OffersDetailActivity.class);
            intent.putExtra("product", (Products) productObj.get(position));
            // startActivity(intent);
    
            View view = getLocalActivityManager().startActivity("OffersDetailActivity",
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
            replaceView(view);
    
        }
    
        public void loadData() {
            adapter = new CustomArrayAdapter(OffersActivity.this,
                    R.layout.product_list_row, productObj);
    
            lvProducts.setAdapter(adapter);
        }
    
        protected void back() {
    
            if(history.size() > 0) {  
                history.remove(history.size());  
                setContentView(history.get(history.size()));  
            }else {  
                finish();  
            }   
    
        }
    
        protected void replaceView(View view) {
    //      if (history.size() == 0) {
    //          if (rootView != null) {
    //              history.add(rootView);
    //              rootView = null;
    //          }
    //      }
            // Adds the old one to history
            history.add(view);
            // Changes this Groups View to the new View.
            setContentView(view);
    
        }
    
        @Override
        public void onBackPressed() {
            OffersActivity.group.back();
            return;
        }
    
        public class ProductAsyncTask extends
                AsyncTask<String, String, ArrayList<Products>> {
    
            String responseString = null;
            ProgressDialog progressDialog;
    
            public ProductAsyncTask() {
                super();
                progressDialog = new ProgressDialog(OffersActivity.this);
                progressDialog.setCancelable(false);
            }
    
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                progressDialog.setMessage("Loading...");
                progressDialog.show();
            }
    
            @Override
            protected ArrayList<Products> doInBackground(String... params) {
    
                responseString = readJSONSFeed(params[0]);
                if (responseString != null) {
                    return processUserListJSON(responseString);
                } else {
                    return null;
                }
            }
    
            @Override
            protected void onPostExecute(ArrayList<Products> result) {
                super.onPostExecute(result);
                if (result.size() == 0 || result == null) {
                }
                progressDialog.dismiss();
                loadData();
    
            }
    
            private String readJSONSFeed(String url) {
    
                StringBuilder stringBuilder = new StringBuilder();
    
                HttpClient httpClient = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(url + Constants.REQ_FOR_OFFER);
    
    
    
                try {
                    HttpResponse response = httpClient.execute(httpGet);
                    StatusLine statusLine = response.getStatusLine();
    
                    int statuscode = statusLine.getStatusCode();
    
                    if (statuscode == 200) {
                        HttpEntity httpEntity = response.getEntity();
                        InputStream inputStream = httpEntity.getContent();
    
                        BufferedReader buffer = new BufferedReader(
                                new InputStreamReader(inputStream));
    
                        String line = null;
                        if ((line = buffer.readLine()) != null) {
                            stringBuilder.append(line);
                        }
                        // buffer.close();
                        inputStream.close();
                    } else {
                    }
    
                } catch (Exception e) {
                }
                return stringBuilder.toString();
            }
    
            private synchronized ArrayList<Products> processUserListJSON(
                    String response) {
    
                try {
                    JSONObject json = new JSONObject(response);
                    JSONArray Records = json
                            .getJSONArray(Constants.JSON_OBJECT_DATA);
                    for (int i = 0; i < Records.length(); i++) {
                        JSONObject Record = Records.getJSONObject(i);
    
                        String tProductID = Record.getString("product_id");
                        String tTitle = Record.getString("title");
                        String tImage = Record.getString("image");
                        String tDetails = Record.getString("short_description");
                        String tLongDetails = Record.getString("long_description");
                        String tOffer = Record.getString("offer");
                        String tActive = Record.getString("active");
                        String tPromoText = Record.getString("promotion_text");
                        String tProminent = Record.getString("prominent");
    
                        product = new Products(tProductID, tTitle, tDetails,
                                tLongDetails, tImage, tOffer, tActive, tPromoText,
                                tProminent);
    
                        if (product == null) {
                        } else {
                            productObj.add(product);
                        }
    
                    }
    
                } catch (JSONException ex) {
                    System.out.println(ex);
                    return null;
                }
    
                return productObj;
            }
    
        }
    
    }'
    
  • OfferDeatilsActivity


    公共类OffersDetailActivity扩展了Activity实现         OnClickListener,OnItemSelectedListener {     画廊画廊;     TextView prod_descri,productTitle1,productTitle2;     ImageAdapter imageAdapter;     ImageView leftArrow,rightArrow;     private int selectedImagePosition = 0;     私人清单;     字符串标题,网址,标题1;     捆绑b;     产品产品;     ProductDetails pDetails;     ArrayList productList;     按钮btnFacebook,btnTwitter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.products_details);
        init();
        setTitle(getResources().getString(R.string.title_offer));
        b = getIntent().getExtras();
        product = (Products) b.getSerializable("product");
        if (b != null) {
            if (Global.isNetworkAvailable(OffersDetailActivity.this)) {
                new ProductAsyncTask().execute(Constants.url,
                        product.product_id);
            } else {
    
                Intent intent = new Intent(OffersDetailActivity.this,
                        OfflineActivity.class);
                startActivity(intent);
            }
        } else {
        }
    }
    

    // @Override // public void onBackPressed(){ // OffersActivity.group.back(); // // super.onBackPressed(); // //}

    private void init() {
        productList = new ArrayList<ProductDetails>();
        gallery = (Gallery) findViewById(R.id.product_gallery);
        prod_descri = (TextView) findViewById(R.id.product_desc);
        productTitle1 = (TextView) findViewById(R.id.productTitle1);
        productTitle2 = (TextView) findViewById(R.id.productTitle2);
    
        leftArrow = (ImageView) findViewById(R.id.left_arrow_imageview);
        rightArrow = (ImageView) findViewById(R.id.right_arrow_imageview);
    
        btnFacebook = (Button) findViewById(R.id.btnFB);
        btnFacebook = (Button) findViewById(R.id.btnTwitter);
        //btnFacebook.setOnClickListener(this);
        // btnTwitter.setOnClickListener(this);
    
        leftArrow.setOnClickListener(this);
        rightArrow.setOnClickListener(this);
        gallery.setOnItemSelectedListener(this);
    }
    
    @Override
    public void onClick(View v) {
    
        switch (v.getId()) {
        case R.id.left_arrow_imageview:
    
            if (selectedImagePosition > 0) {
    
                // leftArrow.setVisibility(View.VISIBLE);
                --selectedImagePosition;
            } else if (selectedImagePosition == 0) {
                leftArrow.setVisibility(View.GONE);
                rightArrow.setVisibility(View.VISIBLE);
            }
            gallery.setSelection(selectedImagePosition, true);
    
            break;
        case R.id.right_arrow_imageview:
            if (selectedImagePosition < drawables.size() - 1) {
                // rightArrow.setVisibility(View.VISIBLE);
    
                ++selectedImagePosition;
            } else if (selectedImagePosition == drawables.size() - 1) {
                rightArrow.setVisibility(View.GONE);
                leftArrow.setVisibility(View.VISIBLE);
            }
    
            gallery.setSelection(selectedImagePosition, true);
    
            break;
    
    
    
        default:
            break;
        }
    
    }
    
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position,
            long id) {
    
        selectedImagePosition = position;
    
        productTitle1.setText(product.title);
        productTitle2.setText(productList.get(position).title);
        prod_descri.setText(productList.get(position).description);
    
        if (selectedImagePosition > 0
                && selectedImagePosition < drawables.size() - 1) {
            leftArrow.setVisibility(View.VISIBLE);
            rightArrow.setVisibility(View.VISIBLE);
        } else if (selectedImagePosition == 0) {
            leftArrow.setVisibility(View.GONE);
        } else if (selectedImagePosition == drawables.size() - 1) {
            rightArrow.setVisibility(View.GONE);
        }
        // setSelectedImage(selectedImagePosition);
    }
    
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
    }
    
    // AsyncTask
    
    public class ProductAsyncTask extends
            AsyncTask<String, String, ArrayList<ProductDetails>> {
    
        private Context getDialogContext() {
            Context context;
            if (getParent() != null)
                context = getParent();
            else
                context = OffersDetailActivity.this;
            return context;
        }
    
        String responseString = null;
        ProgressDialog progressDialog;
    
        public ProductAsyncTask() {
            super();
            // progressDialog = new ProgressDialog(ProductDetailsActivity.this);
            progressDialog = new ProgressDialog(getDialogContext());
            progressDialog.setCancelable(false);
        }
    
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog.setMessage("Loading...");
            progressDialog.show();
        }
    
        @Override
        protected ArrayList<ProductDetails> doInBackground(String... params) {
    
            responseString = readJSONSFeed(params[0], params[1]);
    
            if (responseString != null) {
                return processProductDetailsJSON(responseString);
            } else {
                return null;
            }
        }
    
        @Override
        protected void onPostExecute(ArrayList<ProductDetails> result) {
            super.onPostExecute(result);
            if (result.size() == 0 || result == null) {
            }
            progressDialog.dismiss();
    
            drawables = createDrawables(result);
            imageAdapter = new ImageAdapter(OffersDetailActivity.this,
                    drawables);
            if (drawables.size() > 0) {
    
                gallery.setSelection(selectedImagePosition, true);
            }
    
            if (drawables.size() == 1) {
                leftArrow.setVisibility(View.GONE);
                rightArrow.setVisibility(View.GONE);
            }
    
            gallery.setAdapter(imageAdapter);
    
        }
    
        private List<Drawable> createDrawables(ArrayList<ProductDetails> result) {
    
            List<Drawable> drawablesUrl = new ArrayList<Drawable>();
            try {
                for (ProductDetails objProDetails : result) {
                    drawablesUrl.add(Global
                            .getBitmapFromURL(objProDetails.image_path));
                    // drawablesUrl.add(loadImageFromURL(objProDetails.image_path));
                }
                return drawablesUrl;
    
            } catch (Exception e) {
                return null;
            }
    
        }
    
        @SuppressWarnings("unused")
        private Drawable loadImageFromURL(String image_path) {
            try {
                InputStream is = (InputStream) new URL(url).getContent();
                Drawable d = Drawable.createFromStream(is, "src name");
                return d;
            } catch (Exception e) {
                return null;
            }
        }
    
        private String readJSONSFeed(String url, String productID) {
    
            StringBuilder stringBuilder = new StringBuilder();
    
            HttpClient httpClient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url + Constants.REQ_FOR_PRODUCT_IMAGE
                    + productID + Constants.REQ_FOR_OFFER);
    
    
    
            try {
                HttpResponse response = httpClient.execute(httpGet);
                StatusLine statusLine = response.getStatusLine();
    
                int statuscode = statusLine.getStatusCode();
    
                if (statuscode == 200) {
    
                    HttpEntity httpEntity = response.getEntity();
                    InputStream inputStream = httpEntity.getContent();
    
                    BufferedReader buffer = new BufferedReader(
                            new InputStreamReader(inputStream));
    
                    String line = null;
                    if ((line = buffer.readLine()) != null) {
                        stringBuilder.append(line);
                    }
                    // buffer.close();
                    inputStream.close();
                } else {
                }
    
            } catch (Exception e) {
            }
            return stringBuilder.toString();
        }
    
        private synchronized ArrayList<ProductDetails> processProductDetailsJSON(
                String response) {
    
            try {
                JSONObject json = new JSONObject(response);
                JSONArray Records = json
                        .getJSONArray(Constants.JSON_OBJECT_DATA);
                for (int i = 0; i < Records.length(); i++) {
                    JSONObject Record = Records.getJSONObject(i);
    
                    String tTitle = Record.getString("title");
                    String tImagePath = Record.getString("image_path");
                    String tDescription = Record.getString("description");
    
                    pDetails = new ProductDetails(tDescription, tTitle,
                            tImagePath);
    
                    if (pDetails == null) {
                        Log.v("SATERRA", "product object null");
                    } else {
                        productList.add(pDetails);
                        Log.v("SATERRA", "product details title ="
                                + productList.get(i).title);
                    }
                }
    
            } catch (JSONException ex) {
                System.out.println(ex);
                return null;
            }
    
            return productList;
        }
    
    }
    

    }“

    • 我得到错误到ArrayIndexOutOFBound ...最后两个我试着这个完成但是我没有完成..指导我..解决这个问题。在这个当我运行第一个标签时是OffersActivity打开列表当我点击列表项打开其详细信息视图(OfferDetailsActivity)并按返回它给出错误强制关闭..

2 个答案:

答案 0 :(得分:5)

         - this solve ...use this Code..
    1)OffersActivityGroup  add one Activity to add your root activity...

        public class OffersActivityGroup extends ActivityGroup {

            public static OffersActivityGroup group;
            private ArrayList<View> history;

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                this.history = new ArrayList<View>();
                group = this;

                // Start the root activity withing the group and get its view
                View view = getLocalActivityManager().startActivity(
                        "OffersActivity",
                        new Intent(this, OffersActivity.class)
                                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                        .getDecorView();

                // Replace the view of this ActivityGroup
                replaceView(view);

            }

            public void replaceView(View v) {
                // Adds the old one to history
                history.add(v);
                // Changes this Groups View to the new View.
                setContentView(v);
            }

            public void back() {
                if (history.size() > 0) {
                    history.remove(history.size() - 1);
                    setContentView(history.get(history.size() - 1));
                } else {
                    finish();
                }
            }

            @Override
            public void onBackPressed() {
                OffersActivityGroup.group.back();
                return;
            }

        }


    2)OffersActivity

        public class OffersActivity extends Activity implements OnItemClickListener {

        CustomArrayAdapter adapter;
        ListView lvProducts;
        ArrayList<Products> productObj;
        Products product;

        // View rootView;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.product_list);

            init();

            // hideFB();
            // hideTwitter();
            setTitle(getResources().getString(R.string.title_offer));
            // API Call

            if (Global.isNetworkAvailable(OffersActivity.this)) {
                new ProductAsyncTask().execute(Constants.url);
            } else {
                Intent intent = new Intent(OffersActivity.this,
                        OfflineActivity.class);
                startActivity(intent);
            }
        }

        @Override
        protected void onResume() {
            super.onResume();
            if (adapter != null) {
                adapter.notifyDataSetChanged();
            }
        }

        private void init() {
            productObj = new ArrayList<Products>();
            lvProducts = (ListView) findViewById(R.id.lv_products);
            lvProducts.setOnItemClickListener(this);
        }

        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

            Intent intent = new Intent(OffersActivity.this,
                    OffersDetailActivity.class);
            intent.putExtra("product", (Products) productObj.get(position));


            View view = OffersActivityGroup.group
                    .getLocalActivityManager()
                    .startActivity("OffersDetailActivity",
                            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                    .getDecorView();
            OffersActivityGroup.group.replaceView(view);

        }

        public void loadData() {
            adapter = new CustomArrayAdapter(OffersActivity.this,
                    R.layout.product_list_row, productObj);

            lvProducts.setAdapter(adapter);
        }

        // @Override
        // public void onBackPressed() {
        // OffersActivity.group.back();
        // return;
        // }

        public class ProductAsyncTask extends
                AsyncTask<String, String, ArrayList<Products>> {

            String responseString = null;
            ProgressDialog progressDialog;

            public ProductAsyncTask() {
                super();
                progressDialog = new ProgressDialog(getParent());
                progressDialog.setCancelable(false);
            }

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                progressDialog.setMessage("Loading...");
                progressDialog.show();
            }

            @Override
            protected ArrayList<Products> doInBackground(String... params) {

                responseString = readJSONSFeed(params[0]);
                if (responseString != null) {
                    return processUserListJSON(responseString);
                } else {
                    return null;
                }
            }

            @Override
            protected void onPostExecute(ArrayList<Products> result) {
                super.onPostExecute(result);
                if (result.size() == 0 || result == null) {
                }
                progressDialog.dismiss();
                loadData();

            }

            private String readJSONSFeed(String url) {

                StringBuilder stringBuilder = new StringBuilder();

                HttpClient httpClient = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(url + Constants.REQ_FOR_OFFER);



                try {
                    HttpResponse response = httpClient.execute(httpGet);
                    StatusLine statusLine = response.getStatusLine();

                    int statuscode = statusLine.getStatusCode();

                    if (statuscode == 200) {
                        HttpEntity httpEntity = response.getEntity();
                        InputStream inputStream = httpEntity.getContent();

                        BufferedReader buffer = new BufferedReader(
                                new InputStreamReader(inputStream));

                        String line = null;
                        if ((line = buffer.readLine()) != null) {
                            stringBuilder.append(line);
                        }
                        // buffer.close();
                        inputStream.close();
                    } else {
                    }

                } catch (Exception e) {
                }
                return stringBuilder.toString();
            }

            private synchronized ArrayList<Products> processUserListJSON(
                    String response) {

                try {
                    JSONObject json = new JSONObject(response);
                    JSONArray Records = json
                            .getJSONArray(Constants.JSON_OBJECT_DATA);
                    for (int i = 0; i < Records.length(); i++) {
                        JSONObject Record = Records.getJSONObject(i);

                        String tProductID = Record.getString("product_id");
                        String tTitle = Record.getString("title");
                        String tImage = Record.getString("image");
                        String tDetails = Record.getString("short_description");
                        String tLongDetails = Record.getString("long_description");
                        String tOffer = Record.getString("offer");
                        String tActive = Record.getString("active");
                        String tPromoText = Record.getString("promotion_text");
                        String tProminent = Record.getString("prominent");

                        product = new Products(tProductID, tTitle, tDetails,
                                tLongDetails, tImage, tOffer, tActive, tPromoText,
                                tProminent);

                        if (product == null) {
                        } else {
                            productObj.add(product);
                        }

                    }

                } catch (JSONException ex) {
                    System.out.println(ex);
                    return null;
                }

                return productObj;
            }

        }

    }
2)OfferDetailsActivity

    public class OffersDetailActivity extends Activity implements
        OnClickListener, OnItemSelectedListener {
    Gallery gallery;
    TextView prod_descri, productTitle1, productTitle2;
    ImageAdapter imageAdapter;
    ImageView leftArrow, rightArrow;
    private int selectedImagePosition = 0;
    private List<Drawable> drawables;
    String title, url, title1;
    Bundle b;
    Products product;
    ProductDetails pDetails;
    ArrayList<ProductDetails> productList;
    Button btnFacebook, btnTwitter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.products_details);
        init();
        setTitle(getResources().getString(R.string.title_offer));
        b = getIntent().getExtras();
        product = (Products) b.getSerializable("product");
        if (b != null) {
            if (Global.isNetworkAvailable(OffersDetailActivity.this)) {
                new ProductAsyncTask().execute(Constants.url,
                        product.product_id);
            } else {

                Intent intent = new Intent(OffersDetailActivity.this,
                        OfflineActivity.class);
                startActivity(intent);
            }
        } else {
        }
    }

//  @Override
//  public void onBackPressed() {
//      OffersActivity.group.back();
//      // super.onBackPressed();
//
//  }

    private void init() {
        productList = new ArrayList<ProductDetails>();
        gallery = (Gallery) findViewById(R.id.product_gallery);
        prod_descri = (TextView) findViewById(R.id.product_desc);
        productTitle1 = (TextView) findViewById(R.id.productTitle1);
        productTitle2 = (TextView) findViewById(R.id.productTitle2);

        leftArrow = (ImageView) findViewById(R.id.left_arrow_imageview);
        rightArrow = (ImageView) findViewById(R.id.right_arrow_imageview);

        btnFacebook = (Button) findViewById(R.id.btnFB);
        btnFacebook = (Button) findViewById(R.id.btnTwitter);
        //btnFacebook.setOnClickListener(this);
        // btnTwitter.setOnClickListener(this);

        leftArrow.setOnClickListener(this);
        rightArrow.setOnClickListener(this);
        gallery.setOnItemSelectedListener(this);
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) {
        case R.id.left_arrow_imageview:

            if (selectedImagePosition > 0) {
                // leftArrow.setVisibility(View.VISIBLE);
                --selectedImagePosition;
            } else if (selectedImagePosition == 0) {
                leftArrow.setVisibility(View.GONE);
                rightArrow.setVisibility(View.VISIBLE);
            }
            gallery.setSelection(selectedImagePosition, true);

            break;
        case R.id.right_arrow_imageview:
            if (selectedImagePosition < drawables.size() - 1) {
                // rightArrow.setVisibility(View.VISIBLE);
                ++selectedImagePosition;
            } else if (selectedImagePosition == drawables.size() - 1) {
                rightArrow.setVisibility(View.GONE);
                leftArrow.setVisibility(View.VISIBLE);
            }

            gallery.setSelection(selectedImagePosition, true);

            break;



        default:
            break;
        }

    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position,
            long id) {

        selectedImagePosition = position;

        productTitle1.setText(product.title);
        productTitle2.setText(productList.get(position).title);
        prod_descri.setText(productList.get(position).description);

        if (selectedImagePosition > 0
                && selectedImagePosition < drawables.size() - 1) {
            leftArrow.setVisibility(View.VISIBLE);
            rightArrow.setVisibility(View.VISIBLE);
        } else if (selectedImagePosition == 0) {
            leftArrow.setVisibility(View.GONE);
        } else if (selectedImagePosition == drawables.size() - 1) {
            rightArrow.setVisibility(View.GONE);
        }
        // setSelectedImage(selectedImagePosition);
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
    }

    // AsyncTask

    public class ProductAsyncTask extends
            AsyncTask<String, String, ArrayList<ProductDetails>> {

        private Context getDialogContext() {
            Context context;
            if (getParent() != null)
                context = getParent();
            else
                context = OffersDetailActivity.this;
            return context;
        }

        String responseString = null;
        ProgressDialog progressDialog;

        public ProductAsyncTask() {
            super();
            // progressDialog = new ProgressDialog(ProductDetailsActivity.this);
            progressDialog = new ProgressDialog(getDialogContext());
            progressDialog.setCancelable(false);
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog.setMessage("Loading...");
            progressDialog.show();
        }

        @Override
        protected ArrayList<ProductDetails> doInBackground(String... params) {

            responseString = readJSONSFeed(params[0], params[1]);

            if (responseString != null) {
                return processProductDetailsJSON(responseString);
            } else {
                return null;
            }
        }

        @Override
        protected void onPostExecute(ArrayList<ProductDetails> result) {
            super.onPostExecute(result);
            if (result.size() == 0 || result == null) {
            }
            progressDialog.dismiss();

            drawables = createDrawables(result);
            imageAdapter = new ImageAdapter(OffersDetailActivity.this,
                    drawables);
            if (drawables.size() > 0) {

                gallery.setSelection(selectedImagePosition, true);
            }

            if (drawables.size() == 1) {
                leftArrow.setVisibility(View.GONE);
                rightArrow.setVisibility(View.GONE);
            }

            gallery.setAdapter(imageAdapter);

        }

        private List<Drawable> createDrawables(ArrayList<ProductDetails> result) {

            List<Drawable> drawablesUrl = new ArrayList<Drawable>();
            try {
                for (ProductDetails objProDetails : result) {
                    drawablesUrl.add(Global
                            .getBitmapFromURL(objProDetails.image_path));
                    // drawablesUrl.add(loadImageFromURL(objProDetails.image_path));
                }
                return drawablesUrl;

            } catch (Exception e) {
                return null;
            }

        }

        @SuppressWarnings("unused")
        private Drawable loadImageFromURL(String image_path) {
            try {
                InputStream is = (InputStream) new URL(url).getContent();
                Drawable d = Drawable.createFromStream(is, "src name");
                return d;
            } catch (Exception e) {
                return null;
            }
        }

        private String readJSONSFeed(String url, String productID) {

            StringBuilder stringBuilder = new StringBuilder();

            HttpClient httpClient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url + Constants.REQ_FOR_PRODUCT_IMAGE
                    + productID + Constants.REQ_FOR_OFFER);



            try {
                HttpResponse response = httpClient.execute(httpGet);
                StatusLine statusLine = response.getStatusLine();

                int statuscode = statusLine.getStatusCode();

                if (statuscode == 200) {

                    HttpEntity httpEntity = response.getEntity();
                    InputStream inputStream = httpEntity.getContent();

                    BufferedReader buffer = new BufferedReader(
                            new InputStreamReader(inputStream));

                    String line = null;
                    if ((line = buffer.readLine()) != null) {
                        stringBuilder.append(line);
                    }
                    // buffer.close();
                    inputStream.close();
                } else {
                }

            } catch (Exception e) {
            }
            return stringBuilder.toString();
        }

        private synchronized ArrayList<ProductDetails> processProductDetailsJSON(
                String response) {

            try {
                JSONObject json = new JSONObject(response);
                JSONArray Records = json
                        .getJSONArray(Constants.JSON_OBJECT_DATA);
                for (int i = 0; i < Records.length(); i++) {
                    JSONObject Record = Records.getJSONObject(i);

                    String tTitle = Record.getString("title");
                    String tImagePath = Record.getString("image_path");
                    String tDescription = Record.getString("description");

                    pDetails = new ProductDetails(tDescription, tTitle,
                            tImagePath);

                    if (pDetails == null) {
                    } else {
                        productList.add(pDetails);
                    }
                }

            } catch (JSONException ex) {
                System.out.println(ex);
                return null;
            }

            return productList;
        }

    }

}

答案 1 :(得分:0)

您在启动第二项活动时遇到的错误:

@Override
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        Intent intent = new Intent(ProductsActivity.this,
                ProductDetailsActivity.class);
        intent.putExtra("product", (Products) productObj.get(position));
//      startActivity(intent);
        View view = getLocalActivityManager()
                .startActivity("product",intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                .getDecorView();
    replaceView(view);
    }

错误

您正在添加FLAG_ACTIVITY_CLEAR_TOP,它将清除您的活动堆栈,而您应该通过添加FLAG_ACTIVITY_REORDER_TO_FRONT标志将下一个活动放入FRONT。

解决方案:

@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
       Intent intent = new Intent(ProductsActivity.this, ProductDetailsActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    View view= getLocalActivityManager().startActivity("product", intent).getDecorView();
    // Again, replace the view
    replaceView(view);
}