You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android端Kobo应用定制:扫码后在MainMenuActivity.xml显示metadata_username

在Kobo安卓应用中显示扫描二维码获取的metadata_username到MainMenuActivity

步骤1:读取metadata_username值

既然你已经在Form Metadata中配置了该字段,扫描二维码后Kobo会将值存入元数据存储容器。可以通过应用内的元数据管理类读取,核心代码示例:

// Java示例
String username = FormMetadataManager.getInstance().getMetadata("metadata_username");
// Kotlin示例
val username = FormMetadataManager.getInstance().getMetadata("metadata_username")

步骤2:在布局文件中添加显示控件

打开res/layout/MainMenuActivity.xml,在合适位置添加TextView用于展示用户名:

<TextView
    android:id="@+id/tv_metadata_username"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="用户名:"
    android:textSize="16sp"
    android:padding="8dp"/>

步骤3:在Activity代码中绑定并赋值

在MainMenuActivity的onCreate方法中,绑定控件并设置读取到的用户名:

// Java示例
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.MainMenuActivity);
    
    TextView usernameTv = findViewById(R.id.tv_metadata_username);
    String username = FormMetadataManager.getInstance().getMetadata("metadata_username");
    if (username != null && !username.isEmpty()) {
        usernameTv.setText("用户名:" + username);
    } else {
        usernameTv.setVisibility(View.GONE);
    }
}
// Kotlin示例
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.MainMenuActivity)
    
    val usernameTv = findViewById<TextView>(R.id.tv_metadata_username)
    val username = FormMetadataManager.getInstance().getMetadata("metadata_username")
    username?.takeIf { it.isNotEmpty() }?.let {
        usernameTv.text = "用户名:$it"
    } ?: run {
        usernameTv.visibility = View.GONE
    }
}

步骤4:处理扫描后的页面刷新

如果二维码扫描在其他页面完成,返回主菜单时需要刷新显示。在onResume方法中添加更新逻辑:

// Java示例
@Override
protected void onResume() {
    super.onResume();
    updateUsernameDisplay();
}

private void updateUsernameDisplay() {
    TextView usernameTv = findViewById(R.id.tv_metadata_username);
    String username = FormMetadataManager.getInstance().getMetadata("metadata_username");
    if (username != null && !username.isEmpty()) {
        usernameTv.setText("用户名:" + username);
        usernameTv.setVisibility(View.VISIBLE);
    } else {
        usernameTv.setVisibility(View.GONE);
    }
}
// Kotlin示例
override fun onResume() {
    super.onResume()
    updateUsernameDisplay()
}

private fun updateUsernameDisplay() {
    val usernameTv = findViewById<TextView>(R.id.tv_metadata_username)
    val username = FormMetadataManager.getInstance().getMetadata("metadata_username")
    username?.takeIf { it.isNotEmpty() }?.let {
        usernameTv.text = "用户名:$it"
        usernameTv.visibility = View.VISIBLE
    } ?: run {
        usernameTv.visibility = View.GONE
    }
}

注意事项

  • 确保FormMetadataManager的实例获取方式与Kobo应用实际代码结构匹配,部分版本可能需要通过InstanceKeeper或特定表单元数据对象读取。
  • 如果metadata_username属于特定表单而非全局,需先获取对应表单的元数据实例再读取字段。

内容的提问来源于stack exchange,提问作者X.Jop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:38:28