2011-01-05 2 views
4

У меня есть мой основной загрузочный класс, загружающий main.xml, но я пытаюсь выяснить, как получить доступ к TextView из другого класса, который загружает информацию из базы данных. Я хотел бы опубликовать эту информацию в TextView.Доступ к TextView из другого класса

До сих пор я не нашел полезных примеров в Google.

EDIT: Это мой класс, который делает работу базы данных:

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? –

+0

Это находится внутри onCreate: новый DBWork ("http://192.168.2.14:8080/DH/DPost", "test_db"); – Jenny

ответ

2

Если на вашем месте я бы сохранить все ваши обновления пользовательского интерфейса в пределах основного Activity класса. Вы просто получите свой класс 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()); 
    } 
} 

Тогда ваш дб класс:

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

Пожалуйста, обратите внимание, что любые операции с базами данных, которые выполняются во время onCreate должны быть как можно быстрее, поскольку они работают в потоке пользовательского интерфейса. Если вы собираетесь выполнять длительные запросы к базе данных, тогда вы должны использовать AsyncTask или создать новый Thread и использовать Handler для обновления пользовательского интерфейса.

0

Вы havew определить ваш TextView с помощью XML и придав ему 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"/> 

Тогда вы Cann доступ к нему в каждом классе с использованием

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

Я думаю, что 'findViewById (int)' будет извлекать только элемент пользовательского интерфейса из ресурса, который вы уже загрузили, используя 'setContentView (int)'. –

3

Вы должны использовать LayoutInflater:

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

Это 'myView.findViewById (..)' – Prabs

0

Это право:

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

Но перед вами должны указать, какой файл вы хотите нас е по:

setContentView (идентификатор файла XML, который включает 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 в своем классе и превратить свой класс в действие, но когда я делаю label = (TextView) findViewById (R.id.TextView01); метка все еще находится в нуле. – Jenny

+0

Класс должен быть расширением, если это действие. Например, открытый класс miaSuocera расширяет действие {......}. – pedr0

1

Вы можете передать ссылки на все свои элементы управления после создания экземпляра класса. Я лично передаю весь класс, который имеет все элементы управления как общедоступные переменные.

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

В приведенном выше примере, где вид bt1 из другого class.you может получить доступ к BT1, используя экземпляр класса и получить id.Now, делать все, что вы хотите сделать с bT1 экземпляром.

Примечание: Сделать Sure bt1 общедоступным в другом классе

Смежные вопросы