2013-07-16 36 views
0

我有一个tablelayout,每行有3个字段。Android从tablerow获取微调文本

第一和第二是文本,他们工作正常,但第三,是一个微调,它工作正常,直到我试图恢复保存的值。

我从表中读取信息验证码:

TableRow row = (TableRow) tableLayout.getChildAt(i); 
TextView a= (TextView) row.getChildAt(0); 
TextView b= (TextView) row.getChildAt(1); 
Log.d(LOGTAG, (String) a.getText()); 
Spinner c= (Spinner) row.getChildAt(2); 

如果我尝试使用微调线,它失败。我想,很多代码diferents件,确保实际不起作用,因为最后一行总是失败......

我创建的微调是这样的:

    ArrayList<String> spinnerArray = new ArrayList<String>(); 
        spinnerArray.add("0%"); 
        spinnerArray.add("25%"); 
        spinnerArray.add("50%"); 
        spinnerArray.add("75%"); 
        spinnerArray.add("100%"); 

        Spinner spinner = new Spinner(home_screen.this); 
        ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(home_screen.this, android.R.layout.simple_spinner_dropdown_item, spinnerArray); 


      spinner.setAdapter(spinnerArrayAdapter); 

      row.addView(spinner); 

回答到第一个答案,这就是输出:

ERROR/AndroidRuntime(5404): FATAL EXCEPTION: main 
    java.lang.NullPointerException: println needs a message 
    at android.util.Log.println_native(Native Method) 
    at android.util.Log.e(Log.java:231) 
    at com.gps.distance.home_screen.guardar(home_screen.java:217) 
    at com.gps.distance.home_screen.access$1000(home_screen.java:22) 
    at com.gps.distance.home_screen$3.onClick(home_screen.java:188) 
    at android.view.View.performClick(View.java:4204) 
    at android.view.View$PerformClick.run(View.java:17355) 
    at android.os.Handler.handleCallback(Handler.java:725) 
    at android.os.Handler.dispatchMessage(Handler.java:92) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5041) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
    at dalvik.system.NativeStart.main(Native Method) 
+0

您确定它有价值吗?如果没有,你会得到一个NullPointerException。一般来说,如果你想对值做些什么,你应该使用OnItemSelectedListener:https://developer.android.com/reference/android/widget/AdapterView.html#setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener) –

+0

Yes , 我想是这样。当我在表 – Biribu

+0

中创建一行时,我可以选择一个介于5之间的值,您说最后一行总是失败。怎么样?它会抛出一个异常它说什么? – Eluvatar

回答

1

首先,你必须确保你有你的微调一个唯一的ID,这样就可以得到它后(通常我会建议在XML定义更多的这一点,但我不知道你是什么”这样做并不是最佳实践)

//add spinner 
Spinner spinner = new Spinner(home_screen.this); 
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(home_screen.this, android.R.layout.simple_spinner_dropdown_item, spinnerArray); 
spinner.setAdapter(spinnerArrayAdapter); 
spinner.setId(android.R.id.list); 
row.addView(spinner); 

现在让我们稍后从我们刚刚添加它的那一行开始使用以下代码。

//to get spinner from table 
TableRow row; 
Spinner c = (Spinner) row.findViewById(android.R.id.list); 
String percentage = (String) c.getSelectedItem(); 
+0

它不起作用,因为我在表中的每一行都有一个微调器。所以我认为如果我在他们所有的设置相同的ID,它会崩溃??。它在失败时spin.getSelectedItem() – Biribu

+0

当你说它失败时,你需要说如何,它是否失败在铸造选定的项目的价值?还是因为自旋为空而失败?也因为你正在为一个id搜索一个不同的行(其中只有一个视图有一个匹配的id),所以使用相同的id设置所有的spinners没有问题。 – Eluvatar

+0

我在我的问题中添加了输出,是一个大输出 – Biribu