问题:如何唯一地识别android复合视图中的元素?
背景 在我的应用程序中,我使用了Compound View。因为它有两个TextFields,每行有一个图像和一个搜索栏。布局工作正常。
因此在布局中有两个单独的搜索栏。我需要在我的活动中获得它们的价值。
我可以分别识别每一行,因为它们有id。但是行内的项目在每一行中重复。
我的问题是 如何唯一识别每个搜索栏?
row_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android" >
<RelativeLayout
android:id="@+id/colunm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="40sp" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="6dip"
android:layout_marginRight="6dip"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:fadingEdge="horizontal"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textAppearance="?android:attr/textAppearanceSmall" />
<SeekBar
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
</merge>
screen_layout.xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.example.test.view.Compound
android:id="@+id/vol_Row1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
custom:column_summary="TEST SUMMARY I"
custom:column_title="Test TITLE 1"
custom:image_Icon="@drawable/ic_action1" />
<com.example.test.view.Compound
android:id="@+id/vol_Row2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
custom:column_summary="TEST SUMMARY 2"
custom:column_title="Test TITLE 2"
custom:image_Icon="@drawable/ic_action2" />
</LinearLayout>
row_layout class
public Compound(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a=context.obtainStyledAttributes(attrs,R.styleable.Options, 0, 0);
String titleText=a.getString(R.styleable.Options_title);
String summaryText=a.getString(R.styleable.Options_summary);
int icon=a.getInt(R.styleable.Options_image_Icon,0);
a.recycle();
LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.row_layout,this,true);
imageView=getChildAt(0);
imageView.setImageResource(icon);
title=getChildAt(1)
title.setText(titleText);
summary=getChildAt(2)
summary.setText(summaryText);
}
}
答案 0 :(得分:2)
首先,在XML布局文件中向搜索栏添加ID。
<SeekBar
android:id="@+id/seek"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
其次,在您的代码中,在findViewById
视图的实例上使用Compound
,您希望获取对其搜索栏的引用:
Coumpund c1 = (Compound)findViewById(R.id.vol_Row1);
Coumpund c2 = (Compound)findViewById(R.id.vol_Row2);
SeekBar sb1 = (SeekBar)c1.findViewById(seek); // Gives you the SeekBar of c1
SeekBar sb2 = (SeekBar)c2.findViewById(seek); // Gives you the SeekBar of c2
答案 1 :(得分:0)
我是这样做的。在复合视图中,我为每个元素提供了唯一的ID。然后在测试代码中,我可以像这样唯一地访问它们,
private View inflaterView;
LayoutInflater i=(LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflaterView=i.inflate(R.layout.screen_layout, null);
seekBar=(SeekBar) inflaterView.findViewById(R.id.vol_Row1).findViewById(R.id.seekbar);