2014-01-23 32 views
1

大家,從一個TextView獲取一個字符串,它傳遞給一個變量,並把它傳遞給其他活動

我試圖建立一個TextView上在MainActivity獲得來自用戶的查詢,然後通過將查詢字符串轉換爲應傳遞給另一活動的變量,該變量將查詢字符串轉換爲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); 
    } 

維基百科的活動,應接受查詢字符串,並將其添加到字符串結束的URL做維基百科頁面上的搜索和webView1顯示。

下面是維基百科活動代碼。

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的查詢字符串。

我嘗試了一些解決方案出現在堆棧溢出,但要麼不能得到它的工作,或不能真正理解給出的過程。

任何幫助,將不勝感激。

謝謝大家提前。

回答

1

首先:

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

會給你一個運行時錯誤,因爲你已經設置頁面(佈局)的內容視圖之前,你不能intialize 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); 

} 

其次:在類的頂部String query;

你從來沒有真正初始化query聲明之後。

你需要讓用戶搜索的EditText上的文字,大概像這樣:

EditText et = (EditText)findViewById(R.id.editTextId); 
String query = et.getText().toString(); 

最後:

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); 
+0

幾乎在那裏。我沒有收到錯誤信息,但是一旦我點擊了Wikipedia按鈕,它就會打開甚至不在Package Explorer中的Hello World。 – HBT

+0

你的意思是當維基百科活動打開時,或者當public void openwikipedia(View view){'跑了? –

+0

只是修復它,但在此期間,當我按下維基百科按鈕時,它不顯示任何內容,但它會更改屏幕頂部活動的名稱。所以我相信我無法將頁面調用到我的webView1中,該webView1是在我使用的唯一佈局activity_main.xml中定義的。 – HBT

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"); 
+0

在您的情況下,使用查詢而不是文本作爲字符串。 – fedorSmirnov

+0

謝謝你,費多爾。是的,我需要更改EditText的TextView。尚未完全工作,但正常。 – HBT

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); 

要在維基百科的活動中收到您的數據:

Intent passed_intent = getIntent(); 
String passed_text = intent.getStringExtra("my_data"); 
相關問題