2013-11-28 225 views
0

我想通过编程来制作微调器,编码后应用程序开始崩溃。我试图做的是,当选择微调选项时,UI应该根据它改变。 (新手Android开发)微调导致应用程序崩溃

Java代码:

import java.util.ArrayList; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemSelectedListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.LinearLayout; 
import android.widget.Spinner; 
import android.widget.TextView; 

public class Main_Page extends Activity { 
int pos; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main__page); 

    ArrayList<String> array = new ArrayList<String>(); 
    array.add("Total Assets"); 
    array.add("Net Income"); 
    array.add("Cost of Goods Sold"); 
    array.add("Contribution Margin"); 
    array.add("Price Variance"); 
    array.add("Quantity Variance"); 

    LayoutParams params= new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT); 

    LinearLayout layout = new LinearLayout(this); 
    layout.setOrientation(LinearLayout.VERTICAL); 

    Spinner spin = new Spinner(this); 
    spin.setPromptId(R.array.formulas); 
    layout.addView(spin); 
    spin.setLayoutParams(params); 

    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, array); 
    spin.setAdapter(spinnerArrayAdapter); 
    spin.setOnItemSelectedListener(new OnItemSelectedListener() 
    { 
     public void onItemSelected(AdapterView<?> nothing, View v, int position, long something) 
     { 
      pos = position; 
     } 

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

     } 
    }); 



    if(pos==0) 
    { 

     TextView tv = new TextView(this); 
     tv.setText("Liabilities:"); 
     tv.setLayoutParams(params); 

     EditText et = new EditText(this); 
     et.setHint("Enter liabilities value here"); 
     et.setLayoutParams(params); 

     TextView tv1 = new TextView(this); 
     tv1.setText("Owner's Equity:"); 
     tv1.setLayoutParams(params); 

     EditText et1 = new EditText(this); 
     et1.setHint("Enter Owner's Equity value here"); 
     et1.setLayoutParams(params); 

     Button btn = new Button(this); 
     btn.setText("Find"); 
     btn.setLayoutParams(params); 



     layout.addView(tv); 
     layout.addView(et); 
     layout.addView(tv1); 
     layout.addView(et1); 
     layout.addView(btn); 



    } 
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT); 
    this.addContentView(layout, layoutParams); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main__page, menu); 
    return true; 
} 

} 

的logcat:

11-28 15:46:16.659: E/AndroidRuntime(652): FATAL EXCEPTION: main 
11-28 15:46:16.659: E/AndroidRuntime(652): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.accountingsoftware/com.example.accountingsoftware.Main_Page}: android.content.res.Resources$NotFoundException: String resource ID #0x7f060000 
11-28 15:46:16.659: E/AndroidRuntime(652): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
11-28 15:46:16.659: E/AndroidRuntime(652): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
11-28 15:46:16.659: E/AndroidRuntime(652): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
11-28 15:46:16.659: E/AndroidRuntime(652): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
11-28 15:46:16.659: E/AndroidRuntime(652): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-28 15:46:16.659: E/AndroidRuntime(652): at android.os.Looper.loop(Looper.java:123) 
11-28 15:46:16.659: E/AndroidRuntime(652): at android.app.ActivityThread.main(ActivityThread.java:3683) 
11-28 15:46:16.659: E/AndroidRuntime(652): at java.lang.reflect.Method.invokeNative(Native Method) 
11-28 15:46:16.659: E/AndroidRuntime(652): at java.lang.reflect.Method.invoke(Method.java:507) 
11-28 15:46:16.659: E/AndroidRuntime(652): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
11-28 15:46:16.659: E/AndroidRuntime(652): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
11-28 15:46:16.659: E/AndroidRuntime(652): at dalvik.system.NativeStart.main(Native Method) 
11-28 15:46:16.659: E/AndroidRuntime(652): Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x7f060000 
11-28 15:46:16.659: E/AndroidRuntime(652): at android.content.res.Resources.getText(Resources.java:201) 
11-28 15:46:16.659: E/AndroidRuntime(652): at android.content.Context.getText(Context.java:173) 
11-28 15:46:16.659: E/AndroidRuntime(652): at android.widget.Spinner.setPromptId(Spinner.java:285) 
11-28 15:46:16.659: E/AndroidRuntime(652): at com.example.accountingsoftware.Main_Page.onCreate(Main_Page.java:40) 
11-28 15:46:16.659: E/AndroidRuntime(652): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-28 15:46:16.659: E/AndroidRuntime(652): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
11-28 15:46:16.659: E/AndroidRuntime(652): ... 11 more 
+0

也许你的语境为空? – kai

+0

你是否已经在你的strings.xml文件中正确定义了你的数组? – GrIsHu

+0

使用String []而不是那个ArrayList,它可能有帮助 –

回答

0
spin.setPromptId(R.array.formulas); 

setPromptId()需要一个R.string资源,不R.array。这导致

android.content.res.Resources$NotFoundException: String resource ID #0x7f060000 

(在logcat中的NullPointerException异常是从以前版本的代码通过logcat的时间戳就是证明。我编辑的问题,以去除不相关的老例外。)

+0

是这样:String [] str = new String [6]; \t \t str [1] =“总资产”; \t \t str [2] =“净收入”; \t \t str [3] =“销售成本”; \t \t str [4] =“贡献边际”; \t \t str [5] =“价格差异”; \t \t str [6] =“Quantity Variation”; Spinner spin = new Spinner(this); \t \t spin.setPrompt(str +“”); \t \t layout.addView(spin); \t \t spin.setLayoutParams(params); –

+0

@ user3026643不,提示只是微调对话框标题。微调器选项来自适配器。 – laalto

+0

[http://s27.postimg.org/bp1txpnoj/Capture.png]这是组件显示的方式。你能帮我修好吗? –

0

在你spin.setPromptId(R.array.formulas);线该方法获取整数值,并且您正在定义R.array

鉴于它Sets the prompt to display when the dialog is shown.因此您应该设置资源,如R.String.appname

试试这个。

spin.setPromptId(R.string.app_name); 
+0

没有解决问题。你能告诉我如何解决重叠的组件。就像我在运行程序之后在main.xml和.java文件中的其他组件相互重叠一样。 –