Доступ к TextView из другого класса - PullRequest
4 голосов
/ 05 января 2011

Мой основной класс запуска загружает main.xml, но я пытаюсь выяснить, как получить доступ к 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")

Тем не менее, каждый раз, когда я делаю это, я получаю нулевое исключение

Ответы [ 6 ]

3 голосов
/ 05 января 2011

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

        LayoutInflater inflater = getLayoutInflater();
        View myView = inflater.inflate(R.layout.main, null);
        TextView myTextView = (TextView) findViewById(R.id.myTextViewInXml);
2 голосов
/ 06 января 2011

Будь я на вашем месте, я бы сохранил все ваши обновления пользовательского интерфейса в вашем основном классе 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 для обновления пользовательского интерфейса.

1 голос
/ 09 августа 2012

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

0 голосов
/ 12 декабря 2017
TextView bt1 =m_activity.findViewById(R.id.textview1);

В приведенном выше примере, где представление bt1 из другого класса. Вы можете получить доступ к bt1 с помощью экземпляра класса и получить идентификатор. Теперь делайте все, что вы хотите, с экземпляром bt1.

Примечание. Убедитесь, что bt1 общедоступен в другом классе

0 голосов
/ 05 января 2011

Это правильно:

 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 голосов
/ 05 января 2011

Вы должны определить свой TextView, используя xml и присвоив ему идентификатор.Пример:

<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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...