2012-11-26 51 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