web-dev-qa-db-ja.com

データバインディングを使用して静的メソッドを呼び出す方法は?

layout.xmlファイルのUtilクラスメソッドを次のように呼び出したい

<TextView
         Android:layout_width="wrap_content"
         Android:layout_height="wrap_content"
         Android:text="@{PreferenceUtil.getSavedUser().fullName}"/>

PreferenceUtilをインポートしました

<import type="com.amelio.utils.PreferenceUtil"/>

そして、PreferenceUtil.classにはいくつかのメソッドがあります。

public class PreferenceUtil {

    public static LoginResponse getSavedUser() {
        SharedPreferences sf = Amelio.getInstance().getSharedPreferences(PREF, Context.MODE_PRIVATE);
        String userJson = sf.getString(PREF_USER_DATA, null);
        if (userJson == null || userJson.equals("")) {
            return null;
        }
        return new Gson().fromJson(userJson, LoginResponse.class);
    }
}

問題

    Found data binding errors.
****/ data binding error ****msg:cannot find method getSavedUser() in class com.amelio.utils.PreferenceUtil
file:D:\Khemraj\_AndroidStudioWorkspace_\amelioFinal\app\src\main\res\layout\activity_cart.xml
loc:94:40 - 94:68
****\ data binding error ****

これも可能ですか、これが推奨されるかどうかも提案します。

7
Khemraj

それでも苦労している場合に備えて、答えを見つけたに違いないことを願っています。次に答えを見つけてください。

    <data>
      <import type="com.amelio.utils.PreferenceUtil"/>
 </data>


<TextView
         Android:layout_width="wrap_content"
         Android:layout_height="wrap_content"
         Android:text='@{PreferenceUtil.getSavedUser()}' />

値にアクセスするには、LoginResponseがパブリックとしてマークされていることを確認してください。

3
DHRUV SINGH

まだ答えが見つからない場合:
オブジェクトタイプをインポートして、次のようにそのタイプにキャストする必要があります。

<data>
  <import type="com.amelio.utils.PreferenceUtil"/>
  <import type="yourdirectory.LoginResponse"/>

</data>


<TextView
     Android:layout_width="wrap_content"
     Android:layout_height="wrap_content"
     Android:text='@{((LoginResponse)(PreferenceUtil.getSavedUser()).fullName}' />
1
Zahra Sdg