TextView Problems中的getText()

时间:2017-12-21 16:28:28

标签: android eclipse textview gettext settext

这是我第一次在这里发帖,希望你能帮助我。

我的问题可能很容易解决,但我被卡住了...我实施了TextViewButtonTextView通过单击按钮获取另一个随机字符串。 我想从Textview获取当前文本,但这不会给我任何值或字符串或错误...

这是XML文件:

<TextView
    android:id="@+id/res"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    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只向Messenger提供文本“generieren”....

我希望你能提出一些建议,以获得当前设定的文字......

祝你好运

EDIT 1,Full 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];   
}
}

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

使用以下代码。它会弹出选择要发送文本的应用程序。如果没有应用程序来处理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;
}