findViewById()在一个活动中起作用,但在另一个活动中起作用

时间:2011-10-25 15:32:51

标签: android android-edittext nullreferenceexception android-view findviewbyid

我正在尝试将EditText从Activity1传递到Activity2。

Activity1代码:

public void openNextActivity() 
{
    Intent intent = new Intent("com.abc.xyz.ImageActivity"); 
    EditText myEditText = (EditText)findViewById(R.id.myEditText);

    int myEditTextId = myEditText.getId();
    //For Test purpose ----- starts
    // **Point1: next line of code works fine in this Activity1**
    EditText myEditTextTest = (EditText)findViewById(myEditTextId); 
    //For Test purpose ----- ends   

    intent.putExtra("myEditText", myEditTextId);

    startActivity(intent); 
}

Activity2代码:

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.comments_detail);

    Bundle extras = getIntent().getExtras();
    if(extras != null)
    {
        int myEditTextId = extras.getInt("myEditText");

        // Point2: next line of code displays the correct Id
        Log.d("tag","myEditTextId"+ myEditTextId);

        // Point 3: Next line of code not works in this Activity2
        EditText myEditText = (EditText)findViewById(myEditTextId);

        if(myEditText != null)
        {
            Log.d("tag","Not null");
        }
        else
        {
            Log.d("tag","null");// **Point4: this condition executes**
        }
    }
}

问题在于: EditText myEditText =(EditText)findViewById(myEditTextId);在Activity1 中正常工作但在Activity2中无法正常工作。

修改

注意:这两项活动都使用不同的布局 感谢您宝贵的时间和帮助

5 个答案:

答案 0 :(得分:6)

您可以访问的唯一视图是您在活动2开始时加载的布局中的视图,即 R.layout.comments_detail 中的视图。我猜测Activity 1使用setContentView(..)加载一个不同的布局,并且在那个'myEditText被定义并且在范围内的布局中。

答案 1 :(得分:0)

您无法将视图作为额外内容传递。您可以在视图中传递字符串(如果这是您的目的)。

答案 2 :(得分:0)

在您分配之前,您似乎想要获取EditText ID:

int myEditTextId = myEditText.getId();
EditText myEditText = (EditText)findViewById(myEditTextId); **// Point1: Works fine**

请改为尝试:

EditText myEditText = (EditText)findViewById(myEditTextId); **// Point1: Works fine**
int myEditTextId = myEditText.getId();

修改

有问题的EditText是否甚至存在于布局布局中? (R.layout.comments_detail)

答案 3 :(得分:0)

这不可能。

如果您尝试操作活动2中的活动1,那么您应该从活动2返回活动1的内容。通过将您在活动1中创建的视图的ID传递给活动2,不应解决任何问题在活动2中创建。在当前活动上调用findViewById。由于您未在视图中设置任何内容,因此无法找到它。

答案 4 :(得分:0)

我认为如果你在Activity1和Activity2中使用相同的布局R.layout.comments_detail,它可以工作,因为findViewById()返回唯一的id,这个id只属于layout_detail