【问题标题】:Trying to change TextView String尝试更改 TextView 字符串
【发布时间】:2013-11-02 22:31:08
【问题描述】:

我一直在寻找答案,并且尝试了很多东西,但没有任何效果......

所以,我在做我认为是一个简单的应用程序(我刚开始学习)

所以我有一个活动将几个字符串发送到另一个,其中几个 TextView 应该将它们的值更改为新的字符串,但这没有发生。这里有代码:

public class LoginActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);


        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                    .commit();
        }

        Intent intent = getIntent();
        String mail = intent.getStringExtra(MainActivity.MAIL);
        String password = intent.getStringExtra(MainActivity.PASSWORD);

        setContentView(R.layout.fragment_login);
        TextView displayMailSetter = (TextView) findViewById(R.id.mailView);
        displayMailSetter.setText(mail);
        displayMailSetter.postInvalidate();

        TextView displayPasswordSetter = (TextView)findViewById(R.id.passwordView);
        displayPasswordSetter.setText(password);
        displayPasswordSetter.postInvalidate();

        displayMailSetter.postInvalidate();

        setContentView(R.layout.activity_login);
    }
}

【问题讨论】:

  • 您不需要在 onCreate 中调用 postInvalidate()。 postInvalidate() 表示视图发生了变化,需要重新绘制,但是在onCreate中,还没有绘制完成(并且postInvalidate是用于非UI线程的)。
  • 那我不明白它是如何工作的。我有几个 TextViews,只是为了位置方便而在 XML 中设置的。由于没有文字,我在这里更改了它们的值,但它没有在模拟器中更新。我尝试在 xml 中给出一些默认值,然后这些值出现了,所以它似乎没有更新 GUI(没有 NullPointer 错误)

标签: android string settext


【解决方案1】:

试着去掉这几行代码:

displayMailSetter.postInvalidate();
// Don't take out your displayPasswordSetter initilization and setText

displayPasswordSetter.postInvalidate();

displayMailSetter.postInvalidate();

setContentView(R.layout.activity_login);

更改这些代码行:

        super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

        super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_login);

并取出原件(就在意图下方)。

setContentView(R.layout.fragment_login);

问题在于您将布局设置为 3 种不同的布局。第一个和第三个是相同的布局,但没有 TextViews。第一个和第三个是不必要的,你应该只设置一次布局。将其设置为 fragment_login 后,布局具有 TextViews,设置它们的文本,但布局随后更改为没有 TextViews 的布局。

【讨论】:

  • 如果我删除 setContentView(R.layout.activity_login);从最后,应用程序崩溃
  • 你把你的LogCat拿出来后setContentView可以贴出来吗?
  • @user2948787 您有 3 次调用 setContentView。为什么你有这么多?每次调用它时,它都会使用默认值重新膨胀视图层次结构,从而使您将视图值设置为无效。
  • @Catherine 我没看到那个。 TextView 可能在第二个布局中?它们需要放在第一个布局中吗?
  • 您的元素在哪个视图中? activity_login 还是 fragment_login?你为什么不发布你的崩溃堆栈跟踪?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 2020-09-21
  • 1970-01-01
相关资源
最近更新 更多