来自 TextView 问题的 getText()

Posted

技术标签:

【中文标题】来自 TextView 问题的 getText()【英文标题】:getText() from TextView Problems 【发布时间】:2018-06-04 08:55:12 【问题描述】:

这是我第一次在这里发布东西,希望您能帮助我。

我的问题可能很容易解决,但我被困住了......我实现了TextViewButtonTextView 通过单击按钮获取另一个要显示的随机字符串。 我想从 Textview 中获取当前的文本,但这并没有给我任何值或字符串或错误...

这是 XML 文件:

<TextView
    android:id="@+id/res"
    android:layout_
    android:layout_
    android:layout_weight="1.20"
    android:background="@drawable/textview"
    android:gravity="center"
    android:textColor="#FFFFFF"
    android:textSize="30dp" 
    android:editable = "true"
    android:text="generieren"
    />

新文本由MainActivity 内的以下代码设置:

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Resources resi = getResources();

    final String[] ausreden = resi.getStringArray(R.array.ausreden);
    Button b = (Button)this.findViewById(R.id.btn);
    b.setOnClickListener(new Button.OnClickListener() 
        public void onClick(View v) 
            TextView aus = (TextView) findViewById(R.id.res);

            String g = getRandom(ausreden);
            aus.setText(g);

            //aus.setTextIsSelectable(true);

        
    );

到目前为止,我一直在尝试通过 getText() 方法引用当前显示的 TextView 的值。我的代码:

@Override
    public boolean onCreateOptionsMenu(Menu menu) 

    getMenuInflater().inflate(R.menu.share_menu, menu);
    mShareActionProvider=(ShareActionProvider)menu.findItem(R.id.menu_item_share).getActionProvider();
    mShareActionProvider.setShareIntent(doShare());
    return true;
    

public Intent doShare() 
    Intent intent = new Intent(Intent.ACTION_SEND);
    TextView textview = (TextView) findViewById(R.id.res);
    intent.setAction(Intent.ACTION_SEND);
    intent.putExtra(Intent.EXTRA_TEXT,textview.getText().toString());
    intent.setType("text/plain");


    return intent;

在模拟器中测试我的应用程序,ShareButton 仅将文本“generieren”提供给 Messenger....

希望您能给我一些建议,以获取当前设置的文本...

最好的问候

编辑 1,完整的 Main_Activity

package com.example.test;

import java.util.Random;

import android.app.Activity;
import android.content.Intent;
import android.content.IntentSender;
import android.content.res.Resources;
import android.graphics.Rect;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.text.Layout;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ShareActionProvider;
import android.widget.TextView;


public class MainActivity extends Activity 

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Resources resi = getResources();
    final TextView aus = (TextView)findViewById(R.id.res);
    final String[] ausreden = resi.getStringArray(R.array.ausreden);
    Button b = (Button)this.findViewById(R.id.btn);
    b.setOnClickListener(new Button.OnClickListener() 
        public void onClick(View v) 
            aus = (TextView) findViewById(R.id.res);

            String g = getRandom(ausreden);
            aus.setText(g);

            aus.setTextIsSelectable(true);

        
    );



private ShareActionProvider mShareActionProvider;


@Override
public boolean onCreateOptionsMenu(Menu menu) 

getMenuInflater().inflate(R.menu.share_menu, menu);
mShareActionProvider = (ShareActionProvider) `    
menu.findItem(R.id.menu_item_share).getActionProvider();`
mShareActionProvider.setShareIntent(doShare());
return true;


public Intent doShare() 
TextView aus = (TextView)findViewById(R.id.res);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT,aus.getText().toString());
intent.setType("text/plain");


return intent;






public static String getRandom(String[] array) 
int rnd = new Random().nextInt(array.length);
return array[rnd];   


【问题讨论】:

贴出你检索意图的代码 对不起,我没听明白,你想让我发什么? 检索意图的代码 你说你根本没有得到字符串并且你说你总是得到“generieren”。哪一个是真的? 你能发布整个活动的代码吗?或您调用意图的部分。 【参考方案1】:

使用下面的代码。它将弹出选择应用程序以发送文本。如果不存在处理send 事件的应用程序,那么您的应用程序将被粉碎。它还将send 显示在textview 中的文本。使用户textColor与背景颜色不同。

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Resources resi = getResources();

    final String[] ausreden = resi.getStringArray(R.array.ausreden);
    Button b = findViewById(R.id.btnClick);
    b.setOnClickListener((v) -> 
        TextView aus = findViewById(R.id.res);
        aus.setText("aaaaaa");
        String g = getRandom(ausreden);
        aus.setText(g);
    );



@Override
public boolean onCreateOptionsMenu(Menu menu) 
    getMenuInflater().inflate(R.menu.share_menu, menu);
    return true;


@Override
public boolean onOptionsItemSelected(MenuItem item) 
    if (item.getItemId() == R.id.menu_item_share) 
        startActivity(doShare());
        return true;
    
    return super.onOptionsItemSelected(item);


public Intent doShare() 
    Intent intent = new Intent(Intent.ACTION_SEND);
    TextView textView = findViewById(R.id.res);
    intent.setType("text/plain");
    intent.putExtra(Intent.EXTRA_TEXT, textView.getText().toString());
    return intent;

【讨论】:

这里是完整代码github.com/shuza/blog-android/tree/master/…确保背景颜色和文本颜色不同【参考方案2】:

首先,尝试在MainActivity 类中创建一个全局属性TextView myTextView。这样,您将在活动的生命周期内保持您的 TextView 的相同引用。

我认为,由于您每次要访问 TextView 的文本时都在检索一个新实例,因此您只能获得您在 xml 文件中设置的默认文本。

【讨论】:

您好,感谢您的想法,但如果我这样做,我会在 doShare() 中得到一个空指针... 你能告诉我调用doShare()的那段代码吗? setShareIntend()方法里面调用了doShare方法,可以在编辑后的代码中看到...

以上是关于来自 TextView 问题的 getText()的主要内容,如果未能解决你的问题,请参考以下文章

项目中遇到的问题 TextView和EditText的gettext()方法如何判断取得空值

文本表单 TextView 的 ShareIntent

文本表单TextView的ShareIntent

android 怎样在程序中设置TextView中显示的值

在android中怎样设置textview的文本

单个textview中的两种不同风格,具有不同的重力和高度