我试图找到这个问题的答案,我认为我的代码可以按照我想要的方式工作但是......不是。
问题:我有一个“父”LinearLayout,我添加了几个嵌套的膨胀“Child”LinearLayout。这有效。 每个CHILD布局都有两个视图,一个自定义ChipView和一个TextView。在给每个孩子充气之后,我希望能够在我的活动期间“随时随地”修改每个孩子的ChipView和TextView。
我创建了一个简单的项目,但我只能设法访问FIRST INFLATED子布局的ChipView和TextView。所有后续的都正确地插入到Parent中,但显然我无法获取变量来引用它们。
我之前通过在运行时创建ChipView来做到这一点并且它完美无缺,但是我想要一种更优雅的方法,我可以单独控制XML。
在我的活动中,我有一个创建子项的按钮和一个应该在当前ChipView中调用方法的按钮(即最后一次充气或我点击的那个)。
活动:
public class SandboxActivity extends Activity {
private Button okbtn;
private Button add;
private EditText count;
private ChipsView chips;
private LinearLayout pots;
private TextView amount;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
okbtn = (Button) findViewById(R.id.ok); //calls the method in customviews
add = (Button) findViewById(R.id.add); //adds a child
count = (EditText) findViewById(R.id.count); //the value to call methods with
pots = (LinearLayout) findViewById(R.id.pots); //the PARENT layout
add.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
LinearLayout ll = (LinearLayout) getLayoutInflater().inflate(R.layout.pottemplate, pots);
chips = (ChipsView) ll.findViewById(R.id.chips);
amount = (TextView) ll.findViewById(R.id.amount);
//this should allow me to set the activity.chips variable to the last clicked custom view
chips.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
chips = (ChipsView) v;
}
});
}
});
okbtn.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
chips.setCount(Double.parseDouble(count.getText().toString()));
}
});
}
}
INFLATED XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<com.ded.sandbox.ChipsView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="100dp"
android:layout_height="fill_parent"
android:layout_weight="2"
android:id="@+id/chips">
</com.ded.sandbox.ChipsView>
<TextView
android:id="@+id/amount"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="TextView" android:gravity="center_horizontal" android:textSize="12dp" android:textStyle="bold"/>
</LinearLayout>
答案 0 :(得分:1)
View oneHappyRow = mInflater.inflate(R.layout.one_happy_hour_row,null);
TextView dayOfWeekTextView = (TextView) oneHappyRow.findViewById(R.id.dayOfWeekTextView);
TextView hoursOfDayTextView = (TextView) oneHappyRow.findViewById(R.id.hoursOfDayTextView);
获取每个膨胀布局的参考,设置文本等,然后:
this.addView(oneHappyRow);
我的案例中的类扩展了LinearLayout。
现在每个参考都在工作,你不会总是最后一个参考。