基于xml标签在android中动态更改onClick

时间:2015-03-06 21:31:10

标签: java android xml android-fragments

所以,我有我的应用程序,我希望很容易改变。在中,我希望能够只生成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的片段:

<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?不过,我并不顽固地使用这个标签,所以如果有人想出更好的解决方案,那么我全都是耳朵。

1 个答案:

答案 0 :(得分:0)

我认为您需要的是getIdentifier()

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

this代表Acivity。并在xml中:

android:tag="fragment_ad"

但这种获取标识符的方式非常慢。