2010-12-02 4 views
0

Ich folge ziemlich genau in meinem Code mit Lauren Darcy Teach Yourself Android Application Development in 24 Stunden. Ich habe einen Haken mit "R kann nicht gelöst werden" getroffen. auf einer Linie:Android-Entwicklung: "R kann nicht gelöst werden", aber in nur einem Kontext innerhalb der Klasse

final View layout=inflater.inflate(R.layout.password_dialog, (ViewGroup) findViewById(R.id.root)); 

Die „R nicht aufgelöst werden kann“ auf dieser Linie zweimal auftaucht, einmal für jede Bezugnahme auf R.

  • wenn ich den Autor Code kopieren und einfügen, erhalte ich die das gleiche Ergebnis, so ist es kein Tippfehler
  • aus dem Lesen von Beiträgen von anderen, die das gleiche Problem aufgetreten sind, klingt es wie R ist nicht überall in der Klasse gelöst. Allerdings verwende ich R in anderen Kontexten in dieser Klasse ohne irgendeinen Einwand und mit erwarteten Ergebnissen.
  • ein weiterer allgemeiner Ratschlag ist zu überprüfen, dass ich android.R nicht importiere. Ich bin nicht.

Am Ende hier ... wo soll ich suchen?

Die Klasse in voller Länge:

package com.oneinfinity.btdt; 

import java.util.Calendar; 


import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.os.Bundle; 
import android.text.format.DateFormat; 
import android.text.format.Time; 
import android.util.Log; 
import android.view.KeyEvent; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.DatePicker; 
import android.widget.EditText; 
import android.widget.Spinner; 
import android.widget.TextView; 
import android.widget.Toast; 

public class QuizSettingsActivity extends QuizActivity { 
    SharedPreferences mGameSettings; 
    static final int DATE_DIALOG_ID=0; 
    static final int PASSWORD_DIALOG_ID=1; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.settings); 
     mGameSettings=getSharedPreferences(GAME_PREFERENCES, MODE_PRIVATE); 
     initTextField(R.id.etNickname, GAME_PREFERENCES_NICKNAME); 
     initTextField(R.id.etEmail, GAME_PREFERENCES_EMAIL); 
     writeBirthday(); 
     Button setPass=(Button) findViewById(R.id.ButtonPassword); 
     Button setBd=(Button) findViewById(R.id.ButtonBirthday); 
     setPass.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       //TODO - password dialog 
       Toast.makeText(QuizSettingsActivity.this, "TODO: Password form", Toast.LENGTH_LONG).show(); 
      } 
     }); 
     setBd.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       //TODO - birthday dialog 
       //Toast.makeText(QuizSettingsActivity.this, "TODO: birthday form", Toast.LENGTH_LONG).show(); 
       showDialog(DATE_DIALOG_ID); 
      } 
     }); 
     setSpinner(R.id.spinnerGender, R.array.genderSet, GAME_PREFERENCES_GENDER); 
    } 

    private void setSpinner(int whichSpinner, int whichArray, String whichPref) { 
     final String PutString=whichPref; 
     final Spinner spinner=(Spinner) findViewById(whichSpinner); 
     ArrayAdapter<?> adapter=ArrayAdapter.createFromResource(this, whichArray, android.R.layout.simple_spinner_item); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(adapter); 
     if(mGameSettings.contains(PutString)) { 
      int toSelect=mGameSettings.getInt(PutString, 0); 
      spinner.setSelection(toSelect); 
     } 
     spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
       public void onItemSelected(AdapterView<?> parent, View itemSelected, int selectedItemPosition, long selectedId) { 
        Editor editor = mGameSettings.edit(); 
        editor.putInt(PutString, selectedItemPosition); 
        editor.commit(); 
        //test whether committed 
        if(mGameSettings.contains(PutString)) { 
         Log.i("trace", "gender is set to " + mGameSettings.getInt(PutString, 0)+"");     
        } 
        else { 
         Log.i("trace", "gender has not been specied yet"); 
        } 
       } 
       public void onNothingSelected(AdapterView<?> parent) { 
        Toast.makeText(QuizSettingsActivity.this, "TODO:handle nothing selected", Toast.LENGTH_LONG).show(); 
       } 
      }); 
    } 


    private void initTextField(int whichField, String whichSetting) { 
     final String PutSetting=whichSetting; 
     final EditText findField=(EditText) findViewById(whichField); 
     if(mGameSettings.contains(PutSetting)) { 
      String textString=mGameSettings.getString(PutSetting, ""); 
      findField.setText(textString); 
     } 
     findField.setOnKeyListener(new View.OnKeyListener() { 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if((event.getAction()==KeyEvent.ACTION_DOWN) && (keyCode==KeyEvent.KEYCODE_ENTER)) { 
        String strValueToSave=findField.getText().toString(); 
        Editor editor = mGameSettings.edit(); 
        editor.putString(PutSetting, strValueToSave); 
        editor.commit(); 
        return true; 
       } 
       return false; 
      } 
     }); 

    } 

    /* Just in case it really is necessary to repeat these instructions 
    private void initnicknameEntry() { 
     final EditText nicknameText=(EditText) findViewById(R.id.etNickname); 
     nicknameText.setOnKeyListener(new View.OnKeyListener() { 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if((event.getAction()==KeyEvent.ACTION_DOWN) && (keyCode==KeyEvent.KEYCODE_ENTER)) { 
        String strValueToSave=nicknameText.getText().toString(); 
        return true; 
       } 
       return false; 
      } 
     }); 
    } 
    */ 

    @Override 
    protected Dialog onCreateDialog(int id) { 
     switch(id) { 
      case DATE_DIALOG_ID: 
       DatePickerDialog dateDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { 
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
         TextView dob=(TextView) findViewById(R.id.TextView_Bday_Info); 
         Time dateOfBirth=new Time(); 
         dateOfBirth.set(dayOfMonth, monthOfYear, year); 
         long dtDob = dateOfBirth.toMillis(true); 
         dob.setText(DateFormat.format("MMMM dd, yyyy", dtDob)); 
         Editor editor=mGameSettings.edit(); 
         editor.putLong(GAME_PREFERENCES_DOB, dtDob); 
         editor.commit(); 

        } 
       }, 0, 0, 0); 
      return dateDialog; 
      case PASSWORD_DIALOG_ID: 
       //create the dialog 
       LayoutInflater inflater=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       final View layout=inflater.inflate(R.layout.password_dialog, (ViewGroup) findViewById(R.id.root)); 
       //return the dialog; 
     } 
     return null; 
    } 

    @Override 
    protected void onPrepareDialog(int id, Dialog dialog) { 
     switch(id) { 
     case DATE_DIALOG_ID: 
      DatePickerDialog dateDialog = (DatePickerDialog) dialog; 
      int iDay, iMonth, iYear; 
      if(mGameSettings.contains(GAME_PREFERENCES_DOB)) { 
       long bd=mGameSettings.getLong(GAME_PREFERENCES_DOB, 0); 
       Time birthday=new Time(); 
       birthday.set(bd); 
       iDay=birthday.monthDay; 
       iMonth=birthday.month; 
       iYear=birthday.year; 
       Log.i("trace", "verifying that it is no longer the year 2"); 
      } 
      else { 
       Calendar cal=Calendar.getInstance(); 
       iDay=cal.get(Calendar.DAY_OF_MONTH); 
       iMonth=cal.get(Calendar.MONTH); 
       iYear=cal.get(Calendar.YEAR); 
      } 
      dateDialog.updateDate(iYear, iMonth, iDay); 
      return; 
     case PASSWORD_DIALOG_ID: 
      //prepare the dialog 
      return;   
     } 
    } 

    private void writeBirthday() { 
     TextView dob=(TextView) findViewById(R.id.TextView_Bday_Info); 
     CharSequence myBirthday=getResources().getString(R.string.no_birthday); 
     if(mGameSettings.contains(GAME_PREFERENCES_DOB)) { 
      long bd=mGameSettings.getLong(GAME_PREFERENCES_DOB, 0); 
      myBirthday=DateFormat.format("MMMM dd, yyyy", bd); 
     } 
     dob.setText(myBirthday); 
    } 
} 

Antwort

2

Versuche zu Projekt geht -> Sauber, dass laufen. Gehe dann zu Projekt -> Projekt erstellen. Möglicherweise müssen Sie zuerst "Automatisch erstellen" deaktivieren.

0

kann ich zwei Dinge sehen ein Neuling in scheitern kann:

  1. die xxx.xml ist kein Kleinschreibung. ?
  2. , wenn Sie die SDK-Version schreiben benötigt, was Sie eingegeben haben sehen this notice for the api level part
1

ich Rat Janus würde und Importe Android.R entfernen; aber ersetzen Sie mit your.package.name.R; und werde es reparieren. =)

0

ich habe einige dieser Probleme manchmal gehabt, als ich mit Android anfing. Was ich getan habe, war definitiv meine Importe zu überprüfen. Sollte sein, wie sie sagen, your_package_name.R und nicht Android.

Allso überprüfen Sie, ob Sie manifestieren gut ist. Und was funktioniert die meiste Zeit, ist es einfach Neustart Android Studio.

Viel Glück Kumpel!

Verwandte Themen