[英]Setting a TextView with a database value
使用給定字符串和數據庫中的某些值為 textview 設置文本的最佳做法是什么?
我的主要活動:
MyModel model;
TextView title = (TextView) findViewById(R.id.tvTitle);
title.setText("Username: ", model.getName());
我的模特
private String name;
public String getName() {
return name;
}
到目前為止我找不到解決方案。
方法setText()有幾個簽名,但您需要的是:
public final void setText(CharSequence文本)
所以你可以這樣做:
title.setText("Username: " + model.getName());
但是在這些情況下, AS通常會抱怨您應該避免在setText()
連接字符串,
所以你可以做的是:
String str = "Username: " + model.getName();
title.setText(str);
您還應該考慮在資源中存儲諸如"Username: "
類的文字值:
<string name="username">Username:</string>
並像這樣使用它:
String str = getResources().getString(R.string.username) + model.getName();
title.setText(str);
創建 getter 和 setter 是一個很好的做法,您可以在為模型定義變量后在 Android Studio 中自動生成它們。 除此之外我不知道為什么在你的getName()
你的方法想要返回一個 long 而你實際上返回一個字符串。 將long
更改為String
像這樣 :
public String getName() {
return mName;
}
public void setName(String name) {
mName = name;
}
其他人所說的關於在 setText 方法之外連接字符串的所有內容都是有效的。 至於在 Activity 或 Fragment 中的位置(我在本例中使用的是 Fragment ),我使用以下約定:
在我的方法之外的類主體中聲明我的類字段(用於類范圍的訪問)
public class MyFragment extends Fragment {
private TextView titleView;
public MyFragment() {
//Constructor
}
// and so on ...
}
然后,在 Fragment 膨脹后找到我的 TextView 引用,如果需要立即設置其值
// ...
@override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
View view = inflater.inflate(R.layout.fragment_container, container, false);
titleView = view.findViewById(R.id.title);
String titleStr = "Username: " + model.getName();
titleView.setText(titleStr);
return view;
}
// ...
如果我希望有問題的數據庫值發生變化(例如用戶在設置中更新他們的用戶名),那么我可能還希望利用某些生命周期方法,這些方法在 Fragment(或 Activity )在暫停后恢復時觸發,但是沒有完全重建。
// ...
@override
public void onResume() {
titleStr = "Username: " + model.getName();
titleView.setText(titleStr);
}
// ...
如果您不熟悉,這里有一個關於Android Activity Lifecycle的鏈接,這里有一個關於Fragments的很好的綱要。 希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.