大家,
我正在尝试在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上提供的一些解决方案,但要么无法使其正常工作,要么无法理解给定的程序。
任何帮助将不胜感激。
提前谢谢大家。
答案 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
query
将query
字符串“附加”到意图。然后,您可以在其他活动(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");