setText 没有将文本设置为 EditText
Posted
技术标签:
【中文标题】setText 没有将文本设置为 EditText【英文标题】:setText doesn't set text to EditText 【发布时间】:2012-11-03 10:48:50 【问题描述】:我遇到了一个使用 android 开发近三年来从未遇到过的问题...
我想拍照,拍照后,活动的EditText
s就清晰了。我正在做的是将EditText
的值设置为Strings
,使用getText().toString()
在拍照后恢复它们。
字符串与数据完美存储,但是当我使用setText
时,它不起作用......奇怪的是setHint
起作用了!
怎么可能?
这是我正在使用的代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE)
if (resultCode == RESULT_OK)
// Image captured and saved to fileUri specified in the Intent
grabImage(imgView);
for (int u = 0; u <= 2; u++)
if (savedImgs[u].equals(""))
imgs = u + 1;
savedImgs[u] = photo.toString();
break;
/*Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); ---> It is a small bitmap, for icons...
imgView.setImageBitmap(thumbnail);
imgView.setVisibility(View.VISIBLE);*/
else if (resultCode == RESULT_CANCELED)
// User cancelled the image capture
else
Toast.makeText(this, "Image couldn't be taken. Try again later.", Toast.LENGTH_LONG).show();
if (!tempSpotName.equals("") || !tempSpotDesc.equals(""))
name.setText(tempSpotName);
description.setText(tempSpotDesc);
name
和 description
是全局的 EditTexts
和 tempSpotName
和 tempSpotDesc
是全局的 Strings
。
如何设置文字?
【问题讨论】:
我们可以看看你的布局xml代码吗?你甚至到达 name.setText(tempSpotName); ?你调试过这个吗? 只是检查,但 setText 被调用但显示不正确? if 语句不会阻止它被调用吗? (只是仔细检查,因为 setText 应该可以工作) 你在其他地方打电话给setText()
吗?可能在onResume()
?
@Goot 和 @AJak 是的,我重新定义了 if 语句,它正在被调用。否则setHint
将不起作用...@Sam 我想我在 onCreate() 中调用它...我要检查它...
@Sam okey...我没有意识到我在 onCreate() 中调用了 setText...我是天才,哈哈,非常感谢!如果你回答我会检查它作为接受的答案!
【参考方案1】:
onActivityResult()
不是返回 Activity 时调用的最后一个方法。您可以在文档中刷新您对the Life Cycle 的记忆。 :)
正如我们在 cmets 中所讨论的,如果您在 onResume()
等方法中再次调用 setText()
,这将覆盖在 onActivityResult()
中设置的任何文本。
片段也是如此,您需要在 onViewStateRestored() 方法中进行更新(在 API 17 中添加)。
【讨论】:
onResume() 中的任何更改也会覆盖 onNewIntent() 中的更改。 Fragments 也是如此,需要在 onViewStateRestored() 方法(API 17 中添加)中进行更新。【参考方案2】:有时在onactivity
中更改edittext
结果不起作用。我也遇到了同样的问题
而不是设置
edittext.settext("yourtext");
改为关注onactivityresult
edittext.post(new Runnable()
edittext.settext("yourtext");
);
它对我有用。
【讨论】:
可能是 edittext.post(new Runnable() @Override public void run() edittext.setText("yourtext"); /*注意 setText 是 caMel */ );跨度> 【参考方案3】:首先你必须调试它。
有一个类叫做TextWatcher。每次您的 Textbox.Text 更改时都会调用它。所以这更容易调试和处理问题。网址:http://developer.android.com/reference/android/text/TextWatcher.html
实施示例:
name.addTextChangedListener(new TextWatcher()
@Override
public void afterTextChanged(Editable s)
// TODO Auto-generated method stub
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
// TODO Auto-generated method stub
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
doSomething();
);
祝你好运:)
【讨论】:
【参考方案4】:你可以强制一个 EditText.SetText("blablabla...");在您的 OnActivity 结果中 只需 3 个简单的步骤:
-
将布局重新加载到 Activity 中
重新绑定你的 EditText
照常使用 SetText。
在这个示例代码中,我传递了一个带有意图的 URL 字符串并将其写入 TextView:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
if (resultCode == RESULT_OK)
QRdata= data.getStringExtra("QRURL");
if (QRdata.length()>0)
//Step1
setContentView(R.layout.activity_confirmpackage);
//Step2
TextView qrtxt=(TextView)this.findViewById(R.id.qrurl);
//Setp 3,Voilà!
qrtxt.setText(QRdata.toString());
【讨论】:
【参考方案5】:这个解决方案对我有用 (kotlin)
val editText= EditText(context)
editText.apply
layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTEXT
)
editText.doOnPreDraw
editText.setText("your text")
【讨论】:
以上是关于setText 没有将文本设置为 EditText的主要内容,如果未能解决你的问题,请参考以下文章
Android Eclipse editText 在本地实例上的 setText 后不显示