从TextView获取字符串,将其传递给变量并将其传递给其他活动

时间:2014-01-23 22:06:16

标签: android android-activity textview

大家,

我正在尝试在MainActivity上设置TextView以从用户获取查询,然后将查询字符串传递给应该传递给另一个活动的变量,该活动将查询字符串按顺序排列到URL显示在MainActivity上定义的WebView上的搜索。

这是我的MainActivity,还没有结束,因为我从这里开始遇到麻烦。

public class MainActivity extends Activity {
String query;

TextView term =  (TextView) findViewById(R.id.searchtext);

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

    WebView intView = (WebView) findViewById(R.id.webView1);
    intView.getSettings().setBuiltInZoomControls(true);

}

public void openWikipedia(View view){

     Intent intent = new Intent(this, Wikipedia.class);
     intent.putExtra("query", query);
     startActivity(intent);
    }

Wikipedia活动应该接收查询字符串并将其添加到字符串中以完成在Wikipedia页面上搜索并在webView1上显示的URL。

下面的维基百科活动代码。

public class Wikipedia extends Activity {

String query;

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

public void openwikipedia (View view){
    //String query = bundle.getString(query);
    String url = "en.wikipedia.org/wiki/Special:Search?search="+ query;
    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setData(Uri.parse(url));
    startActivity(i);
}   

}

我在理解如何将变量从一个活动传递到另一个活动以及如何从TextView查询中获取字符串时遇到了一些麻烦。

我尝试了Stack Overflow上提供的一些解决方案,但要么无法使其正常工作,要么无法理解给定的程序。

任何帮助将不胜感激。

提前谢谢大家。

3 个答案:

答案 0 :(得分:1)

从TextView获取字符串:

TextView tv = (TextView) findViewById(R.id.tv_name);
String text = tv.getText().toString();

但实际上,您必须使用EditText从用户那里获取内容。

将变量传递给intent的方式是可以的。要在其他活动中解压缩,您必须这样做:

Intent intent = this.getIntent();
String text = intent.getStringExtra("query");

答案 1 :(得分:1)

首先:

TextView term =  (TextView) findViewById(R.id.searchtext);

会给你一个运行时错误,因为在设置页面的内容视图(布局)之前你无法初始化TextView。

所以,在onCreate中,你有这行代码:

setContentView(R.layout.activity_wikipedia);

因此,在该行代码之后,您可以将TextView term初始化为布局中的任何TextView。例如:

TextView term; // declare here

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

    // but initialize here
    term = (TextView) findViewById(R.id.searchtext);

    WebView intView = (WebView) findViewById(R.id.webView1);
    intView.getSettings().setBuiltInZoomControls(true);

}

其次:

在宣布query后,您从未真正初始化String query;EditText et = (EditText)findViewById(R.id.editTextId); String query = et.getText().toString(); 位于班级的顶部。

您需要获取用户在EditText中搜索的文本,可能是这样的:

 Intent intent = new Intent(this, Wikipedia.class);
 intent.putExtra("query", query);
 startActivity(intent);

最后:

intent.putExtra

queryquery字符串“附加”到意图。然后,您可以在其他活动(Wikipedia)中收到String query = ""; Bundle bundle = getIntent().getExtras(); if (bundle != null) { query = bundle.getString("query"); } String url = "en.wikipedia.org/wiki/Special:Search?search="+ query; Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); 字符串,如下所示:

bundle.getString("query")

请注意,您需要使用bundle.getString(query)而不是"query",因为intent.putExtra("query", query); 是您从其他类附加到intent的字符串extra的引用,来自此行代码:

{{1}}

答案 2 :(得分:0)

TextView获取文字:

TextView my_tv = (TextView) findViewByid(R.id.your_textview_id);
String my_tv_text = my_tv.getText().toString();

要将数据传递给您的其他活动,您选择好,请使用Intent s:

Intent intent = new Intent(this, WikiPedia.class);
intent.putExtra("my_data", my_tv_text);
startActivity(intent);

要在WikiPedia活动中接收您的数据:

Intent passed_intent = getIntent();
String passed_text = intent.getStringExtra("my_data");