我有一个40个方格的表,每个都有一个ID。当我从另一个活动传递Bundle时,我需要从该包中提取Note,Color和ID。然后应用程序将更改/添加文本并更改提取的ID指定的方块的背景。每个方块都有int格式的ID。从其他活动传递的每个ID都是字符串格式。我无法弄清楚如何使它成为findViewById(R.id.passed_id),以及如何让两种不同的格式协同工作。我试图改变每个方格的ID,但是eclipse说ID必须有一个字母和一个数字。我迷路了....这是代码:
package com.tt;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity
{
String gotNotes;
String n;
String gotDOW;
String gotID;
public String Id;
String gotHour;
TextView notes;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialize();
Button settings = (Button)findViewById(R.id.settings);
Bundle gotPackage = getIntent().getExtras();
if (gotPackage != null){
gotNotes = gotPackage.getString("AddedNote");
// if (gotNotes.equals(" ")){n = "Empty";}else n = gotNotes;
//gotDOW = gotPackage.getString("Day");
//gotHour = gotPackage.getInt("Hour");
gotID = gotPackage.getString("ID");
Id = gotID;
notes.setText(gotNotes + (" \n") + gotID);
}
else{}
settings.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
Intent i = new Intent(v.getContext(),Settings.class);
startActivityForResult(i,0);
}
});
}
private void initialize()
{
// TODO Auto-generated method stub
notes = (TextView)findViewById(R.id.);
notes.setGravity(Gravity.CENTER);
notes.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
更新
Ok.. here's the log:
12-27 16:18:55.661: D/AndroidRuntime(12497): Shutting down VM
12-27 16:18:55.661: W/dalvikvm(12497): threadid=1: thread exiting with uncaught exception (group=0x40abf228)
12-27 16:18:55.671: E/AndroidRuntime(12497): FATAL EXCEPTION: main
12-27 16:18:55.671: E/AndroidRuntime(12497): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tt/com.tt.MainActivity}: java.lang.NullPointerException
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2194)
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2229)
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.app.ActivityThread.access$600(ActivityThread.java:139)
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1261)
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.os.Handler.dispatchMessage(Handler.java:99)
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.os.Looper.loop(Looper.java:154)
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.app.ActivityThread.main(ActivityThread.java:4944)
12-27 16:18:55.671: E/AndroidRuntime(12497): at java.lang.reflect.Method.invokeNative(Native Method)
12-27 16:18:55.671: E/AndroidRuntime(12497): at java.lang.reflect.Method.invoke(Method.java:511)
12-27 16:18:55.671: E/AndroidRuntime(12497): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-27 16:18:55.671: E/AndroidRuntime(12497): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-27 16:18:55.671: E/AndroidRuntime(12497): at dalvik.system.NativeStart.main(Native Method)
12-27 16:18:55.671: E/AndroidRuntime(12497): Caused by: java.lang.NullPointerException
12-27 16:18:55.671: E/AndroidRuntime(12497): at com.tt.MainActivity.initialize(MainActivity.java:69)
12-27 16:18:55.671: E/AndroidRuntime(12497): at com.tt.MainActivity.onCreate(MainActivity.java:30)
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.app.Activity.performCreate(Activity.java:4531)
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2150)
12-27 16:18:55.671: E/AndroidRuntime(12497): ... 11 more
答案 0 :(得分:30)
您可以使用以下命令从字符串中获取标识符:
notes = (TextView)findViewById(getResources().getIdentifier(VIEW_NAME, "id", getPackageName()));
其中VIEW_NAME
是您正在生成的标识符字符串。之后,您可以像现在一样设置文本。如果您还需要获取字符串和drawable,也可以将id
更改为相应的类型。
答案 1 :(得分:1)
假设您传入的是实际字符串“R.id.passed_id”,我建议您传入整数值。因此,只需传入R.id.passed_id。
应用程序的R文件中的所有值都只是映射到资源位置的整数。 findById()
方法只查找整数,因此如果您启动Activity
并传入所需资源的整数值,它就会找到它。
注意:仅当资源位于同一个应用程序中时才会生效。 R文件对于应用程序保持不变,但即使它们具有相同的名称,它们也可以从一个应用程序更改为另一个应用程序。但是,如果这两个活动属于同一个应用程序包,那么它将起作用。
答案 2 :(得分:-1)
男人,我并不知道你究竟想做什么。 Id 是Android小部件的id,然后是函数 initialize()你应该以这种方式将字符串转换为int: Integer.ValueOf(Id) 希望这是你想要的。