2014-01-07 57 views
1

我是新來的碎片,我正在開發一個應用程序使用滑動視圖與選項卡。我的目標是獲取存儲在字符串數組中的textview顯示文本,並在應用程序重新啓動時進行更改。 但是,當我使用findViewById似乎有一個問題。Android的方法findViewById(int)是未定義的類型第一(片段)

代碼:

First.java

import java.util.Random; 

import android.support.v4.app.Fragment; 
import android.app.Dialog; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

public class first extends Fragment{ 

String[] strArr; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    View rootView = inflater.inflate(R.layout.first_xml, container, false); 
    strArr = getResources().getStringArray(R.array.quote); 
      //quote is the name given to the string array 

    return rootView; 
} 




@Override 
public void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    refreshTV(); 
} 

void refreshTV(){ 
     TextView tv = (TextView)findViewById(R.id.text1); 
     Random ran = new Random(); 
     int c = ran.nextInt(strArr.length); 
     tv.setText(strArr[c]); 


    } 

} 

2.first_xml.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:background="#fa6a6a" > 

<TextView android:layout_width="fill_parent" 
    android:id="@+id/text1" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:text="@array/quote" 
    android:textSize="40dp" 
    android:layout_centerInParent="true"/> 


</RelativeLayout> 

任何幫助將不勝感激。 請讓我知道,如果我提到的任何東西都不夠清楚。 謝謝!

回答

5

Fragment類不具備findViewById(...)方法,所以你必須從你的rootView或您Activity得到你的意見。我建議您將TextView作爲Fragment的成員,從rootView中檢索它,並根據需要參考它。

public class first extends Fragment { 

String[] strArr; 
TextView tv; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    View rootView = inflater.inflate(R.layout.first_xml, container, false); 
    tv = rootView.findViewById(R.id.text1); 
    strArr = getResources().getStringArray(R.array.quote); 
      //quote is the name given to the string array 

    return rootView; 
} 

@Override 
public void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    refreshTV(); 
} 

void refreshTV(){ 
     Random ran = new Random(); 
     int c = ran.nextInt(strArr.length); 
     tv.setText(strArr[c]); 
    } 
} 

(編輯,以除去到findViewById冗餘呼叫。)

0

我會建議你創建你的片段TextView屬性,並在您的onCreateView方法分配它,並用這句話myTextView = (TextView) rootView.findViewById(R.id.text1);,然後在你的refreshTV方法使用它。

希望它可以幫助

4

保留()由inflater.inflate()在onCreateView返回根視圖。

這可以稍後用來調用findViewById()來根據需求查找任何視圖。

View mView; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    mView = inflater.inflate(R.layout.xyz, container, false); 

    return mView; 
} 

然後在類的任意位置

mView.findViewById(R.id.some_view); 



或者,如果你可以使用

getActivity().findViewById(R.id.xyz); 
+0

getActivity()就是這麼容易得多。謝謝〜 – James

相關問題