【问题标题】:Dynamically change onClick in android based on xml tags基于xml标签动态改变android中的onClick
【发布时间】:2015-03-06 21:31:10
【问题描述】:

所以,我有我想要轻松更改的应用程序。如,我希望能够只制作 xml 文件,而根本不必更改为每个客户端定制的 java。这是一个类似信息亭的软件,不需要额外的功能,只需要信息。

我已经设置了片段,以便在单击按钮时替换片段,如下所示:

@Override
public void onClick(View v) {
    MainFragment fragment = new MainFragment();
    layoutId = R.layout.fragment_ad;

    fragment.setLayoutId(layoutId);

    android.app.FragmentTransaction transaction = getFragmentManager().beginTransaction();

    transaction.replace(R.id.top_main, fragment);
    transaction.addToBackStack(null);

    transaction.commit();
}

layoutId 是我在 MainFragment 类中创建的一个变量,它让它知道在调用 transaction.replace() 时要转到哪个 xml 文件。

这是来自 xml 的 sn-p:

<Button
    android:layout_width="0px"
    android:layout_height="fill_parent"
    android:text="New Button"
    android:id="@+id/button3"
    android:layout_weight="2.75"
    android:onClick="onClick"
    android:tag="R.layout/fragment_ad"
    / >

现在我想做的是,我不想将 layoutId 设置为 R.layout.fragment_ad,而是将其替换为 v.getTag() 指向的内容。但是,v.getTag() 是一个对象,可以转换为字符串、int 或其他一些东西,但不能用于从 R 中获取布局信息。

有没有办法可以使用 android:tag 的内容并让它获取标签文本指向的布局 id?不过,我并不固执地使用标签,所以如果有人提出更好的解决方案,我会全力以赴。

【问题讨论】:

    标签: java android xml android-fragments


    【解决方案1】:

    我想你需要的是getIdentifier()

    String buttonTag = button.getTag().toString();
    layoutId = this.getResources().getIdentifier(buttonTag, "layout", app_package_name);
    

    this 代表活动。在xml中:

    android:tag="fragment_ad"
    

    但是这种获取标识符的方式很慢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多