簡體   English   中英

使用數據庫值設置 TextView

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM