2011-01-05 92 views
4

我有我的主要啓動類加載main.xml,但我想弄清楚如何從另一個從數據庫加載信息的類訪問TextView。我想將這些信息發佈到TextView。從另一個類訪問TextView

到目前爲止,我還沒有在Google上找到任何有用的示例。

編輯: 這是我的類,它是做數據庫的工作:

import android.widget.TextView;import android.view.View; 
public class DBWork{ 
    private View view; 
... 
TextView tv = (TextView) view.findViewById(R.id.TextView01); 
tv.setText("TEXT ME") 

然而,每次我這樣做,我得到一個NullPointerException

+0

您的主類如何調用DBWork類? – 2011-01-05 21:35:08

+0

這是內部的onCreate: 新DBWORK( 「http://192.168.2.14:8080/DH/DPost」, 「TEST_DB」); – Jenny 2011-01-05 22:39:34

回答

2

如果我是你,我會保持你的主要Activity類中所有的UI更新。您只需讓DBWork班級將您想要顯示的文字返回給您的Activity即可。因此,像:

public class Main extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     TextView tv = (TextView) view.findViewById(R.id.TextView01); 
     DBWork db = new DBWork("192.168.2.14:8080/DH/DPost";, "test_db"); 
     tv.setText(db.getText()); 
    } 
} 

然後你的DB類:

public class DBWork{ 
    ... 
    public String getText(){ 
     //do stuff 
     return ""; 
    } 
} 

請注意,因爲它們是在UI線程中運行你在onCreate執行任何數據庫操作應儘可能快。如果要執行長時間運行的數據庫查詢,則應使用AsyncTask或創建新的Thread並使用Handler來更新UI。

0

您havew使用XML,給它你的TextView定義一個ID。例如:

<TextView android:layout_width="wrap_content" 
        android:layout_height="match_parent" 
        android:textColor="#FFF" 
        android:gravity="center_vertical|right" 
        android:paddingLeft="5dip" 
        android:paddingRight="5dip" 
        android:text="@string/name" 
        android:id="@+id/myTextViewInXml"/> 

然後你卡恩訪問每個班級都在使用

TextView myTextView = (TextView) findViewById(R.id.myTextViewInXml); 
+4

我認爲'findViewById(int)'只會從已經使用'setContentView(int)'加載的資源中檢索一個UI元素。 – 2011-01-05 20:12:15

3

你應該使用LayoutInflater:

 LayoutInflater inflater = getLayoutInflater(); 
     View myView = inflater.inflate(R.layout.main, null); 
     TextView myTextView = (TextView) findViewById(R.id.myTextViewInXml); 
+1

這是'myView.findViewById(..)' – Prabs 2017-04-14 07:33:05

0

這是正確的:

LayoutInflater inflater = getLayoutInflater(); 
View myView = inflater.inflate(R.layout.main, null); 
TextView myTextView = (TextView) findViewById(R.id.myTextViewInXml); 

但是你之前必須指定你想要我們的文件e。通過:

的setContentView(XML文件的ID,其中包括R.id.myTextViewInXml)

沒有了findViewById(R.id.myTextViewInXml);送花兒給人返回null

這是一個例子:

public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.virtualtour); // before !! 
     progress_bar = (ProgressBar) findViewById(R.id.vt_progress); 
     loading_ly = (RelativeLayout) findViewById(R.id.vt_layout_loading); 
     panorama_description = (TextView) findViewById(R.id.vt_description); 
     virtualtour_relatively = (RelativeLayout) findViewById(R.id.vt_layout_opengl); 

......... 
+0

我想在我的班級創建的onCreate並把我的班變成一個活動,但是當我做標籤=(TextView的)findViewById(R.id.TextView01);標籤仍然被發現爲空。 – Jenny 2011-01-05 21:10:08

+0

該類必須是活動的擴展。例如,公共類miaSuocera擴展了Activity {......}。 – pedr0 2011-01-06 11:52:00

1

在創建類實例後,您可以將引用傳遞給所有控件。我親自將全部控制權作爲公共變量傳遞給全班。

0
TextView bt1 =m_activity.findViewById(R.id.textview1); 

在上面的例子,其中圖BT1是從另一個class.you可以通過使用類實例訪問BT1和獲得id.Now,你想與BT1實例做什麼都。

注意:確保bt1在另一個類中公開