2012-04-06 178 views
0

當我運行下面的代碼時,一切都變好,直到我改變seekBar的值。 onProgressChange更改myValue的文本值。我得到一個關閉的力量,它給了我下面的日誌貓條目。Android/Java變量超出範圍可能

在進行調試時,拋出的異常說它找不到ID 2,你可以告訴它是myValue,這是預期的。請讓我知道你在想什麼。 感謝

04-06 18:15:38.576: E/AndroidRuntime(25164):android.content.res.Resources$NotFoundException: String resource ID #0x2f 
04-06 18:15:38.576: E/AndroidRuntime(25164): at android.content.res.Resources.getText(Resources.java:201) 
04-06 18:15:38.576: E/AndroidRuntime(25164): at android.widget.TextView.setText(TextView.java:2877) 
04-06 18:15:38.576: E/AndroidRuntime(25164): at thisPackage.Tabs.CustomSeekBar.onProgressChanged(CustomSeekBar.java:74) 

ColorsActivity(主)

public class ColorsActivity extends Activity 
{ 
CustomSeekBar red = new CustomSeekBar(); 
RelativeLayout theItem; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.seekbarlist);  
    RelativeLayout thisOne = (RelativeLayout)findViewById(R.id.mainLayout); 



    attachLayout(thisOne, red, "red", 1); 
    //attachLayout(thisOne, "blue", 2); 
    //attachLayout(thisOne, "green", 3); 

    // Amarino.connect(this, "00:11:11:21:05:53"); 
} 
public void attachLayout(RelativeLayout layout, CustomSeekBar object, String label, int id) 
{ 

    theItem = object.createCustomSeekBar(this, label); 
    theItem.setId(id); 
    RelativeLayout.LayoutParams myLayoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    myLayoutParams.addRule(RelativeLayout.BELOW,id-1); 
    theItem.setLayoutParams(myLayoutParams); 
    layout.addView(theItem, id); 
} 


} 

CustomSeekBar

public class CustomSeekBar implements SeekBar.OnSeekBarChangeListener { 

    Context myContext; 
RelativeLayout myLayout; 
    TextView myValue; 
    TextView myLabel; 
    SeekBar mySeekBar; 

    public void CustomSeekBar(){ 

    } 


public RelativeLayout createCustomSeekBar(Context context, String label){ 


    myContext = context;     
    myLayout = new RelativeLayout(myContext); 


    mySeekBar = new SeekBar(myContext); 
    myLabel = new TextView(myContext); 
    myValue = new TextView(myContext); 

    mySeekBar.setId(1); 
    myLabel.setId(2); 
    myValue.setId(3); 

    RelativeLayout.LayoutParams mySeekBarParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    RelativeLayout.LayoutParams myLabelParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    RelativeLayout.LayoutParams myValueParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 

    int seekBarId = mySeekBar.getId(); 
    int labelId = myLabel.getId(); 

    myLabelParams.addRule(RelativeLayout.BELOW,seekBarId); 
    myValueParams.addRule(RelativeLayout.BELOW,seekBarId); 
    myValueParams.addRule(RelativeLayout.RIGHT_OF,labelId); 

    mySeekBar.setLayoutParams(mySeekBarParams); 
    myLabel.setLayoutParams(myLabelParams); 
    myValue.setLayoutParams(myValueParams); 

    myLabel.setText(label); 
    myValue.setText("hello");  
    mySeekBar.setOnSeekBarChangeListener(this); 

    myLayout.addView(myLabel); 
    myLayout.addView(myValue); 
    myLayout.addView(mySeekBar); 


    return myLayout; 

} 

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) { 
    myValue.setText(progress);  
    //Amarino.sendDataToArduino(myContext, "00:11:11:21:05:53", 'A', progress); 
} 
public void onStopTrackingTouch(SeekBar seekBar){ 

} 
public void onStartTrackingTouch (SeekBar seekBar){ 
} 


} 

回答

3

要設置文本爲int,因此Android認爲你正試圖通過ID引用的資源。將progress轉換爲字符串應該可以解決您的問題。例如。 Integer.toString(progress)