用更新的TextView Android替换TextView

时间:2015-05-12 04:47:29

标签: android view

我在活动布局中动态添加TextView。活动使用startActivityForResult从另一个活动获取值,然后动态创建textView并为其添加特定值。 但问题是,当我再次获取值并返回负责显示textView的活动时,有一个更新按钮指向同一活动,并且不会更新textView并在布局中添加另一个textView它不断更新而不断添加。 我知道我们可以将其可见性设置为已消失,但它是否也会从布局的子元素中删除textView,或者还有另一种方法来销毁该文本视图并在该位置创建另一个文本视图?

我的onActivityResult方法:

protected void onActivityResult(int requestCode, int resultCode, Intent intentData) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, intentData);
        if(requestCode == REQUEST_CODE && resultCode == RESULT_OK){
            locationLat = intentData.getDoubleExtra("LocationLat", 0.0);
            locationLng = intentData.getDoubleExtra("LocationLang", 0.0);
            location = locationLat + " "+locationLng;
            if(location != ""){
                Toast.makeText(this, location, Toast.LENGTH_LONG).show();
                lblName = new TextView(this);
                lblName.setText(location);
                lblName.setId(9);
                lblName.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
                LinearLayout ll = (LinearLayout) findViewById(R.id.llOne);
                ll.addView(lblName, 5);
                Button btnSetLoc = (Button) findViewById(R.id.getLoc);
                btnSetLoc.setText("Change Location");
            }
            else{
                Toast.makeText(this, "location is not set", Toast.LENGTH_LONG).show();
            }
        }
    }

3 个答案:

答案 0 :(得分:1)

您确定要删除textview而不更改其值吗?

更改TextView的文本要比从Layout中删除TextView并重新附加新文本便宜得多

如果您想删除TextView并附加一个新文本,可以先使用Layout的removeView方法删除旧文本,然后使用Layout的addView方法插入一个新文件

您可以通过调用Layout的indexOfChild方法

来获取视图的索引

如果您只需更改TextView中的文本即可实现您的尝试,您只需使用TextView的方法setText()

基本上是什么原因归结为

TextView oldText = (TextView) findViewById(R.id.oldText);
LinearLayout ll = (LinearLayout) findViewById(R.id.llOne);
int index = ll.indexOfChild(oldText);
ll.removeViewAt(index);
TextView newText = new TextView(context);
ll.addView(newText, index);

答案 1 :(得分:1)

尝试检查 lblName 是否为null(如果为null)然后创建它,否则更新它

{{1}}

答案 2 :(得分:0)

您需要在runOnUiThread中更新textview。

runOnUiThread :在UI线程上运行指定的操作。如果当前线程是UI线程,则立即执行该操作。如果当前线程不是UI线程,则该操作将发布到UI线程的事件队列中。

参考http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable)

在您的代码中实施:

protected void onActivityResult(int requestCode, int resultCode, Intent intentData) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, intentData);
        if(requestCode == REQUEST_CODE && resultCode == RESULT_OK){
            locationLat = intentData.getDoubleExtra("LocationLat", 0.0);
            locationLng = intentData.getDoubleExtra("LocationLang", 0.0);
            location = locationLat + " "+locationLng;
            if(location != ""){
                 runOnUiThread(new  Runnable() { 
                public  void  run() { 
                   Toast.makeText(this, location, Toast.LENGTH_LONG).show();
                lblName = new TextView(this);
                lblName.setText(location);
                lblName.setId(9);
                lblName.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
                LinearLayout ll = (LinearLayout) findViewById(R.id.llOne);
                ll.addView(lblName, 5);
                Button btnSetLoc = (Button) findViewById(R.id.getLoc);
                btnSetLoc.setText("Change Location");
                } 
            }); 

            }
            else{
                Toast.makeText(this, "location is not set", Toast.LENGTH_LONG).show();
            }
        }
    }

有关runOnUiThread的更多实现:http://android.okhelp.cz/java_android_code.php?s=runOnUiThread