2012-11-26 54 views
0

,我的應用程序大火起來,做的事情必須做,但tabhost就不復存在了。 mainactivity.java是我用3個選項卡初始化tabhost的地方,以下代碼的第一部分是我使用NFC讀取功能的選項卡之一。這是因爲待定嗎?我真的不知道如何解決它,我是否必須在每個活動佈局中實施3個選項卡?的Android tabhost當我掃描我的NFC標籤丟失時NFC掃描

我的代碼:

package com.example.ponpon; 

import android.annotation.TargetApi; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.PendingIntent; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.content.SharedPreferences; 
import android.nfc.NdefMessage; 
import android.nfc.NfcAdapter; 
import android.os.Bundle; 
import android.os.Parcelable; 
import android.os.PatternMatcher; 
import android.preference.Preference; 
import android.preference.PreferenceManager; 
import android.provider.Settings; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.Toast; 

@TargetApi(10) 
public class CouponManager extends Activity { 

     private static final String TAG = "NFCReadTag"; 
     private NfcAdapter mNfcAdapter; 
     private IntentFilter[] mNdefExchangeFilters; 
     private PendingIntent mNfcPendingIntent; 
     public static final String PREF_FILE_NAME = "PrefFile"; 

     private int[] images = new int[11]; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.coupon_layout); 

      //List of images 
      images[0]=R.drawable.cp0; 
      images[1]=R.drawable.cp1; 
      images[2]=R.drawable.cp2; 
      images[3]=R.drawable.cp3; 
      images[4]=R.drawable.cp4; 
      images[5]=R.drawable.cp5; 
      images[6]=R.drawable.cp6; 
      images[7]=R.drawable.cp7; 
      images[8]=R.drawable.cp8; 
      images[9]=R.drawable.cp9; 
      images[10]=R.drawable.cp10; 

      //Restore preferences 
      SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE); 
      int storedPreference = preferences.getInt("storedInt", 0); 

      //Image to use depending on coupon collected 
      final ImageView img = (ImageView)findViewById(R.id.imageView1); 

      if(storedPreference!=10) 
      { 
       img.setImageResource(images[storedPreference]); 
       img.invalidate(); 
      } 
      else 
      { 
       AlertDialog.Builder builder = new AlertDialog.Builder(this); 
       builder.setCancelable(false); 
       builder.setTitle("Coupon Redemption"); 
       builder.setMessage("Redeem Your Coupon?"); 
       builder.setInverseBackgroundForced(true); 
       builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) 
        { 
         dialog.dismiss(); 
         SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE); 
         SharedPreferences.Editor editor = preferences.edit(); 
         editor.putInt("storedInt", 0); // value to store 
         editor.commit();  
         img.setImageResource(images[0]); 
         img.invalidate(); 
        } 
       }); 
       builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.dismiss(); 
         img.setImageResource(images[10]); 
         img.invalidate(); 
        } 
       }); 
       builder.show(); 
      } 


      //Check and send Intent from NFC tag discovered 
      mNfcAdapter = NfcAdapter.getDefaultAdapter(this); 

      mNfcPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, 
        getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP 
        /*| Intent.FLAG_ACTIVITY_CLEAR_TOP*/), 0); 


      IntentFilter coupontag = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); 
      coupontag.addDataScheme("http"); 
      coupontag.addDataAuthority("www.ichatime.com", null); 
      coupontag.addDataPath(".*", PatternMatcher.PATTERN_SIMPLE_GLOB); 

      mNdefExchangeFilters = new IntentFilter[] { coupontag }; 

     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      getMenuInflater().inflate(R.menu.activity_main, menu); 
      return true; 
     } 

     @Override 
     protected void onResume() { 
      super.onResume(); 
      if(mNfcAdapter != null) { 
       mNfcAdapter.enableForegroundDispatch(this, mNfcPendingIntent, 
        mNdefExchangeFilters, null); 
      } else { 
       Toast.makeText(getApplicationContext(), "Sorry, No NFC Adapter found.", Toast.LENGTH_SHORT).show(); 
      } 


     } 

     @Override 
     protected void onPause() { 
      super.onPause(); 
      if(mNfcAdapter != null) mNfcAdapter.disableForegroundDispatch(this); 
      SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE); 
      int storedPreference = preferences.getInt("storedInt", 0); 

      SharedPreferences.Editor editor = preferences.edit(); 
      editor.putInt("storedInt", storedPreference); // value to store 
      editor.commit();  
     } 

     @Override 
     protected void onStop() { 
      super.onStop(); 

      // We need an Editor object to make preference changes. 
       // All objects are from android.context.Context 
       SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE); 
       int storedPreference = preferences.getInt("storedInt", 0); 

       SharedPreferences.Editor editor = preferences.edit(); 
       editor.putInt("storedInt", storedPreference); // value to store 
       editor.commit();  
     } 

     @Override 
     protected void onDestroy() { 
      super.onDestroy(); 

      // We need an Editor object to make preference changes. 
       // All objects are from android.context.Context 
       SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE); 
       int storedPreference = preferences.getInt("storedInt", 0); 

       SharedPreferences.Editor editor = preferences.edit(); 
       editor.putInt("storedInt", storedPreference); // value to store 
       editor.commit();  
     } 

     @Override 
      public void onBackPressed() { 
      SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE); 
      int storedPreference = preferences.getInt("storedInt", 0); 

      SharedPreferences.Editor editor = preferences.edit(); 
      editor.putInt("storedInt", storedPreference); // value to store 
      editor.commit();  
       super.onBackPressed(); 
      } 

     @Override 
     protected void onNewIntent(Intent intent) { 
      super.onNewIntent(intent);  
      SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE); 
      int storedPreference = preferences.getInt("storedInt", 0); 

      if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) { 
       NdefMessage[] messages = null; 
       Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); 
       if (rawMsgs != null) { 
        messages = new NdefMessage[rawMsgs.length]; 
        for (int i = 0; i < rawMsgs.length; i++) { 
         messages[i] = (NdefMessage) rawMsgs[i]; 
        } 
       } 
       if(messages[0] != null) { 
        String result=""; 
        byte[] payload = messages[0].getRecords()[0].getPayload(); 
        // this assumes that we get back am SOH followed by host/code 
        for (int b = 1; b<payload.length; b++) { // skip SOH 
         result += (char) payload[b]; 
        } 
        if (result.contains("ichatime.com")) 
         { 
         final ImageView img = (ImageView)findViewById(R.id.imageView1); 


         /*if (storedPreference!=10) 
         { 
          Toast.makeText(getApplicationContext(), "Coupon collected!", Toast.LENGTH_SHORT).show(); 
          storedPreference++; 
          SharedPreferences.Editor editor = preferences.edit(); 
          editor.putInt("storedInt", storedPreference); 
          img.setImageResource(images[storedPreference]); 
          img.invalidate(); 
         }*/ 
          if (storedPreference==10) 
          { 
           AlertDialog.Builder builder = new AlertDialog.Builder(this); 
           builder.setCancelable(false); 
           builder.setTitle("Redeem Your Coupon?"); 
           builder.setInverseBackgroundForced(true); 
           builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
            public void onClick(DialogInterface dialog, int which) 
            { 
             dialog.dismiss(); 
             SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE); 
             SharedPreferences.Editor editor = preferences.edit(); 
             editor.putInt("storedInt", 0); // value to store 
             editor.commit();  
             img.setImageResource(images[0]); 
             img.invalidate(); 
            } 
           }); 
           builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 
            public void onClick(DialogInterface dialog, int which) { 
             dialog.dismiss(); 
             img.setImageResource(images[10]); 
             img.invalidate(); 
            } 
           }); 
           builder.show(); 
          } 
         else 
         { 
          Toast.makeText(getApplicationContext(), "Coupon collected!", Toast.LENGTH_SHORT).show(); 
          storedPreference++; 
          SharedPreferences.Editor editor = preferences.edit(); 
          editor.putInt("storedInt", storedPreference); 
          editor.commit(); 
          img.setImageResource(images[storedPreference]); 
          img.invalidate(); 
         }} 
        else 
        { 
         Toast.makeText(getApplicationContext(), "Wrong tag detected!", Toast.LENGTH_SHORT).show(); 
        } 
        //Debugging Mode to see what is contained in the tags. 
      //   Toast.makeText(getApplicationContext(), "Tag Contains " + result, Toast.LENGTH_SHORT).show(); 
       } 
      } 
     } 

    } 

也是,我的主要活動:

package com.example.ponpon; 

import android.os.Bundle; 
import android.app.TabActivity; 
import android.content.Intent; 
import android.view.Menu; 
import android.widget.TabHost; 
import android.widget.TabHost.TabSpec; 

public class MainActivity extends TabActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     TabHost tabHost = getTabHost(); 

     TabSpec spec1=tabHost.newTabSpec("Coupon Manager"); 
     spec1.setContent(R.id.tab1); 
     spec1.setIndicator("Coupons"); 
     Intent CouponsIntent = new Intent(this, CouponManager.class); 
     spec1.setContent(CouponsIntent); 

     TabSpec spec2=tabHost.newTabSpec("Help"); 
     spec2.setIndicator("Help"); 
     spec2.setContent(R.id.tab2); 
     Intent SettingsIntent = new Intent(this, Settings.class); 
     spec2.setContent(SettingsIntent); 

     TabSpec spec3=tabHost.newTabSpec("Write[Vendor]"); 
     spec3.setIndicator("Write\n[Vendor]"); 
     spec3.setContent(R.id.tab3); 
     Intent HelpIntent = new Intent(this, HelpActivity.class); 
     spec3.setContent(HelpIntent); 

     tabHost.addTab(spec1); 
     tabHost.addTab(spec2); 
     tabHost.addTab(spec3); 
     } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
} 

回答

0

你的邏輯仔細看:你有

if (storedPreference!=10) { 
    ...stuff... (including storedPreference++) 
} 
if (storedPreference==10) { 
    ...stuff... 
} else { 
    SharedPreferences.Editor editor = preferences.edit(); 
    editor.putInt("storedInt", 10); 
    img.setImageResource(images[10]); 
    img.invalidate(); 
} 

你應考慮更換內容在else塊與塊storedPreference!=10的,那麼擺脫這第一塊的。所有你需要的是if storedPreference==10else

+0

我試一下,謝謝!還有一件事,當我用手機掃描NFC標籤時,我的tabhost缺失(使用標籤),我不得不求助於按手機上的後退按鈕。這會導致我的優惠券收回爲0。我在這裏做錯了什麼? – JCDrew90

+0

謝謝!我已經解決了關於圖像未被操縱的問題。現在我需要解決後退按鈕顯示的歷史,也,當收集到的優惠券已經被最大化,對話框不顯示和onRestart,它顯示了回來收集0的優惠券,但是當標籤被掃描,越來越沒有收集優惠券。我猜的東西是錯誤與涉及storedPreference == 10 – JCDrew90

+0

解決了代碼,謝謝! – JCDrew90