我正在尝试使“信息”文本视图具有可扩展的内容。用户会看到一个显示“信息”的文本视图,单击/点击时,会出现另一个包含该信息的文本视图(直到现在一直隐藏)。
这是XML:
<!-- Information expandable block-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/element_background"
android:orientation="vertical"
android:layout_marginTop="@dimen/home_screen_elements_spacing">
<!-- Information block title -->
<TextView
android:id="@+id/app_schedule_fri_information"
android:tag="app_schedule_fri_information_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginLeft="20dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="20dp"
android:layout_marginRight="20dp"
android:layout_marginBottom="8dp"
style="@style/AppTheme"
android:text="@string/app_home_information"
android:textColor="@color/colorTextBody"
android:background="@android:color/transparent"
android:clickable="true"
android:focusable="true"
android:onClick="toggle_contents"/>
<!-- Information block content to hide/show -->
<TextView
android:id="@+id/app_schedule_fri_information_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:layout_marginLeft="20dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="15dp"
android:layout_marginRight="20dp"
android:layout_marginBottom="8dp"
android:background="@android:color/transparent"
style="@style/AppTheme"
android:text="@string/app_home_information_text"
android:textColor="@color/colorTextBody"/>
</LinearLayout>
这是单击时调用的“ toggle_content”函数:
public void toggle_contents(View v){
TextView content = <GET_REF_TO_CONTENT>;
content.setVisibility( content.isShown()
? View.GONE
: View.VISIBLE );
}
我需要什么
如您所见,我被困住了。我正在寻找一种在标题Textview中存储对内容Textview的引用的方法。调用后,toggle_content()将从标题视图中恢复该引用(例如v.getTag()),并使用它来定位内容并进行切换。
我尝试过的事情:
我试图将内容textview的ID存储在标题textview的标签中(实际上存在于上述xml中),但是未能将标签转换为ID。
答案 0 :(得分:0)
那不是很性感,但是很有效:
public void toggle_contents(View v){
int id = getResources().getIdentifier(v.getTag().toString(), "id", this.getPackageName());
TextView content = findViewById(id);
content.setVisibility( content.isShown()
? View.GONE
: View.VISIBLE );
}
希望有人可以提供更好的答案,因为这看起来像是将来的更新可能会破解的黑客。
答案 1 :(得分:0)
通过将第一个文本视图的可见性设置为VISIBLE / GONE,在第一个文本视图上使用单击侦听器,并通过切换使其第二个显示/消失:
TextView information = (TextView) findViewById(R.idapp_schedule_fri_information);
TextView informationText = (TextView) findViewById(app_schedule_fri_information_text);
information.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (informationText.isVisible()) {
informationText.setVisibility(View.GONE);
} else {
informationText.setVisibility(View.VISIBLE);
}
}
});
答案 2 :(得分:0)
您不需要ID。
如果您已经将informationText
的引用存储在information
的标签中,例如:
information.setTag(informationText);
然后您可以像这样检索它:
public void toggle_contents(View v){
TextView content = ((TextView) v).getTag();
content.setVisibility( content.isShown()
? View.GONE
: View.VISIBLE );
}
因此,除了将tag
的名称存储在TextView
中之外,您可以存储对TextView
本身的引用,而不必费心查找其ID。