2011-01-05 9 views
4

메인 시작 클래스에 main.xml을로드하고 있는데 데이터베이스에서 정보를로드하는 다른 클래스에서 TextView에 액세스하는 방법을 알아 내려고하고 있습니다. 그 정보를 TextView에 게시하고 싶습니다.다른 클래스의 TextView에 액세스하기

지금까지 Google에서 유용한 예제를 찾지 못했습니다.

편집

: 나는

+0

DBWork 클래스를 호출하는 기본 클래스는 어떻습니까? –

+0

이것은 onCreate 안에 있습니다 : 새로운 DBWork ("http://192.168.2.14:8080/DH/DPost", "test_db"); – Jenny

답변

2

내가 모든 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

당신은 당신의 텍스트 뷰는 XML을 사용하고 제공 정의 havew는 NullPointerException을 얻을 그렇게하지만

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

, 매번 : 이 내 데이터베이스 작업을하고있는 클래스입니다 이드. 예 : 다음

<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) '를 사용하여로드 한 리소스에서만 UI 요소를 검색한다고 생각합니다. –

3

를 사용하여 당신은 위해 LayoutInflater를 사용한다 :

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

을하지만 전에 :

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

그것은'myView.findViewById (..)입니다. – Prabs

0

이 맞아 원하는 파일을 지정해야합니다. 전자는 기준 :

된 setContentView (R.id.myTextViewInXml을 포함하는 XML 파일의 ID) 그 findViewById(R.id.myTextViewInXml);없이

항상 곁에 null를 반환합니다. 내가 당신이라면 메인 Activity 클래스 내에서

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); 라벨이 아직 null로 발견되었습니다. – Jenny

+0

클래스는 활동 인 경우 확장이어야합니다. 예를 들어 공용 클래스 miaSuocera가 활동 {...}을 확장합니다. – pedr0

1

클래스 인스턴스를 만든 후 모든 컨트롤에 참조를 전달할 수 있습니다. 개인적으로 모든 컨트롤을 공용 변수로 가지는 전체 클래스를 전달합니다. 보기 BT1이 class.you 당신이 BT1 예를 함께 할 가장 원하는 일을, 클래스 인스턴스를 사용하여 BT1에 액세스하고 id.Now를 얻을 수 서로입니다 위의 예에서

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

.

참고 : 확실히 다른 클래스에서는 bt1이 공개되어 있어야합니다.

관련 문제