2013-11-28 4 views
0

Я пытаюсь сделать spinner программным путем и после его кодирования приложение начинает сбой. То, что я пытаюсь сделать, - это когда выбрана опция из счетчика, пользовательский интерфейс должен измениться в соответствии с ним. (Новичку для андроида развития)spinner заставляет приложение сбой

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 

(The NullPointerException в LogCat были от предыдущей версии коды, о чем свидетельствуют 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] = «Количество разницы»; Spinner spin = new Spinner (this); \t \t spin.setPrompt (str + ""); \t \t layout.addView (spin); \t \t spin.setLayoutParams (params); –

+0

@ user3026643 Нет, подсказка - это только название диалога spinner. Опция Spinner исходит от адаптера. – 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

не решила проблему. Можете ли вы сказать мне, как решить перекрытие компонентов. Например, если я создаю spinner в main.xml и остальные компоненты в .java-файле после запуска программы, компоненты перекрывают друг друга. –

Смежные вопросы