为什么我的Android Studio(Kotlin)在预览中显示了Android手机的布局,但在生成应用程序中却没有显示?

3
我在Android Studio中制作了一个简单的应用程序。我在XML布局文件中添加了两个TextView和一个Button。预览中显示了TextView和Button,但在生成的Apk中只显示了Button。它没有给出任何错误提示。我不知道问题出在哪里,尝试了所有可能的方法来解决它,但是没有得到任何有用的信息。
activity_home XML代码:
    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <EditText android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:hint="mnail"
              android:id="@+id/editText"/>

    <EditText
            android:id="@+id/textViewSendEmail"
            android:layout_width="344dp"
            android:layout_height="44dp"
            android:hint="Email"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="40dp"/>
    <EditText
            android:id="@+id/textViewSendPassword"
            android:layout_width="344dp"
            android:layout_height="44dp"
            android:hint="Password"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="40dp"
            android:layout_below="@+id/textViewSendEmail"/>

    <Button
            android:id="@+id/sendButton"
            android:layout_width="344dp"
            android:layout_height="44dp"
            android:text="send"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="40dp"
            android:layout_below="@+id/textViewSendPassword"/>

</LinearLayout>

MainActivity 代码

package com.kotlinintent

import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_home.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_home)

        var email_user = textViewSendEmail.text
        var password_user = textViewSendPassword.text

        sendButton.setOnClickListener {
            intent = Intent(this, SecondActvity::class.java)
            intent.putExtra("email", email_user)
            intent.putExtra("password", password_user)
            startActivity(intent)
        }
    }
}

SecondActivity

package com.kotlinintent

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_second.*

class SecondActvity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)


        var bundle : Bundle? = intent.extras
        var emailData = bundle!!.getString("email")
        var passwordData = bundle.getString("password")

        textViewEmail.text = emailData
        textViewPassword.text = passwordData
    }
}

第二个活动的XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".SecondActvity">

    <TextView
            android:id="@+id/textViewEmail"
            android:layout_width="match_parent"
            android:layout_height="44dp"
            android:text="Email"/>
    <TextView
            android:id="@+id/textViewPassword"
            android:layout_width="match_parent"
            android:layout_height="44dp"
            android:text="Password"
            android:layout_marginTop="40dp"
            />

    <Button
            android:id="@+id/getButton"
            android:layout_width="match_parent"
            android:layout_height="44dp"
            android:text="get"
            android:layout_marginTop="40dp"
            />
</LinearLayout>

我们可能需要从您的logcat中获取更多信息。 - Hosein Hamedi
分享你的 Kotlin 代码 - Radesh
检查你的背景颜色。 - Masum
2个回答

1

这些行不再需要

var email_user = textViewSendEmail.text
var password_user = textViewSendPassword.text

使用此代码。
var email_user = textViewSendEmail.text.toString()
var password_user = textViewSendPassword.text.toString()

而且你必须在onclick中调用这些代码,所以你的代码必须像这样

 sendButton.setOnClickListener {
        var email_user = textViewSendEmail.text.toString()
        var password_user = textViewSendPassword.text.toString()
        intent = Intent(this, SecondActvity::class.java)
        intent.putExtra("email", email_user)
        intent.putExtra("password", password_user)
        startActivity(intent)
    }

我建议使用 wrap_content 而不是静态大小(44dp)来设置高度。

@PankajTungaria 你在 EditText 中输入了什么吗? - Radesh
它可以工作了。谢谢@Radesh,也感谢大家,问题是我在onclick方法之外创建了textview对象。但不知道为什么这个对象很重要,因为这些textview是静态的。无论如何,谢谢。 - Pankaj Tungaria
@PankajTungaria 当你调用它时,你会得到EditText的当前文本,所以当在onCreate()中调用它时,它仍然为空,而当你在btn点击时调用它时,它就有一些文本了。 - Radesh

0

你的问题在于你如何添加额外数据。在MainActivity中,你将数据作为意图的额外数据添加。但是在SecondActivity中,你尝试从意图的bundle中获取数据。

请进行以下更改:

var bundle : Bundle? = intent.extras
var emailData = bundle!!.getString("email")
var passwordData = bundle.getString("password")

对于这个

var emailData = intent.getStringExtra("email")
var passwordData = intent.getStringExtra("password")`

或者你可以在MainActivity中将数据放入Bundle中,然后将这个Bundle放入Intent中。然后像你目前的解决方案一样获取数据。


我尝试了,但是没有任何改变。问题确切地说是“Xml textview在构建apk文件中没有显示,我认为静态布局和视图总是在不创建对象的情况下显示”。 - Pankaj Tungaria
它们应该是可见的。尽量不要从活动中为它们设置文本,只留下通过“text”参数在xml中设置的文本。 - Yamko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接