2015-01-04 92 views
1

中设置TextView值,所以我今天开始使用片段,并试图在片段打开时设置TextView值。值可以改变,所以我把它打包成1个函数,所以可以调用它来更新数据。 这里:Android:无法在片段

public void loadDetails(){ 
    ShortcutFunc sf = new ShortcutFunc(this.getActivity()); 
    ConversePrefs cp = new ConversePrefs(this.getActivity()); 
    sf.setTextValue(getActivity(), R.id.profile_name, cp.GetStringSetting("name", "unset") + " " + cp.GetStringSetting("surname", "unset")); 
    String dob = cp.GetStringSetting("dob", "unset"); 
    String bod[] = dob.split("\\-"); 

    LocalDate birthdate = new LocalDate (Integer.valueOf(bod[2]), Integer.valueOf(bod[1]), Integer.valueOf(bod[0])); 
    LocalDate now = new LocalDate(); 
    Years age = Years.yearsBetween(birthdate, now); 
    sf.setTextValue(getActivity(), R.id.profile_bd, dob + " (" + String.valueOf(age) + ")"); 
    sf.setTextValue(this.getActivity(), R.id.profile_country, cp.GetStringSetting("country", "unset").toString()); 
    sf.setTextValue(this.getActivity(), R.id.profile_email, cp.GetStringSetting("email", "unset").toString()); 

    String joined[] = cp.GetStringSetting("join", "unset").split("\\s+"); 
    String joinedArray[] = joined[0].split("\\-"); 

    LocalDate joindate = new LocalDate(Integer.valueOf(joinedArray[0]), Integer.valueOf(joinedArray[1]), Integer.valueOf(joinedArray[2])); 
    LocalDate today = new LocalDate(); 
    //Years joinedThen = Years.yearsBetween(joindate, today); 
    Days joinedThen = Days.daysBetween(joindate, today); 

    sf.setTextValue(this.getActivity(), R.id.profile_join, joined[0] + " (" + joinedThen.toString() + " Days)"); 
    sf.setTextValue(this.getActivity(), R.id.profile_user, cp.GetStringSetting("username", "unset").toString()); 
} 

ShortcutFunc包含此功能:

public void setTextValue(Activity act, int id, String text){ 
    TextView tv = (TextView)act.findViewById(id); 
    tv.setText(text); 
} 

我用它来节省时间,并设置TextViews没有做所有的声明等。 我得到的NullPointerException上tv.setText(文本) ShortcutFunc函数。

这是我怎么称呼loadDetails():

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     loadDetails(); 
    } 

那么,什么是错的?

+0

片段你oveerride'onCreateView()'碎片的看法初始化它们?如果是这样,那么你不应该在activity上调用'findViewById(...)'。 – blad

回答

1

这些TextViews是您的Fragment的成员,而不是Activity持有Fragment的成员。你应该从你的虚增您在OnCreateView()方法

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.my_view, container, false); 
     textView = (TextView) view.findViewById(R.id.my_text_view); 
     return view; 
} 
+0

但这就是片段。 – arleitiss

+0

你正在调用activity.findViewByID(),你应该从你为你膨胀的视图中调用它。 –