我在EditBox中动态地创建了LinearLayout。这是我的代码:
final LinearLayout mainLayout = (LinearLayout) findViewById(R.id.main_relative);
counter = 0;
addButt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
counter += 1;
LinearLayout ll = new LinearLayout(view.getContext());
ll.setOrientation(LinearLayout.HORIZONTAL);
ll.setTag(CONSTANT_LAYOUT + counter);
LinearLayout.LayoutParams layoutParams = new
LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(30, 20, 30, 0);
EditText etProduct = new EditText(view.getContext());
etProduct.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT));
etProduct.setTag(counter);
ll.addView(etProduct);
mainLayout.addView(ll);
}就像一种魅力。每当我点击特定的按钮,它就会创建新的线性布局,EditBox在那里和计数器上逐个增加,用户可以在_EditBox_es中增加价值。
现在,我想获得_EditBox_es的价值,我尝试了如下:
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for (int i=0 ; i<counter ; i++) {
View lr = mainLayout.findViewWithTag(CONSTANT_LAYOUT+i);
EditText et = (EditText)lr.findViewWithTag(counter);
}
}
});
}但我有个错误:
致命异常:主进程: com.myapp,PID: 15055 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法的android.view.View java.lang.NullPointerException
有什么建议吗?
发布于 2017-03-02 07:11:14
请尝试以1而不是0启动for loop,并尝试将标记值大于1或equal给1而不是0。
for (int i=1 ; i<=counter ; i++) { // and condition should be i<=counter = instead of less than
View lr = mainLayout.findViewWithTag(CONSTANT_LAYOUT+i);
EditText et = (EditText)lr.findViewWithTag(counter);
}发布于 2017-03-02 07:11:46
你的循环从零开始。
for (int i=0 ; i<counter ; i++) {
// No value for Zero index.
}在设置标记时,您要添加+1,所以第一个值是1,而不是0。
counter += 1; // Default value of counter is zero发布于 2017-03-02 07:21:00
您已经在根LinearLayout中添加了新的LinearLayout,也可以将setId()添加到新创建的LinearLayout而不是setTag()中,这对您也很好。
LinearLayout ll = new LinearLayout(view.getContext());
ll.setOrientation(LinearLayout.HORIZONTAL);
ll.setId(CONSTANT_LAYOUT + counter);
LinearLayout.LayoutParams layoutParams = new
LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(30, 20, 30, 0);
EditText etProduct = new EditText(view.getContext());
etProduct.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT));
etProduct.setId(counter);
ll.addView(etProduct);
mainLayout.addView(ll);和
for (int i=0 ; i<counter ; i++) {
LinearLayout ll = (LinearLayout )mainLayout.findViewById(CONSTANT_LAYOUT+i);
EditText et = (EditText)ll .findViewById(counter);
}https://stackoverflow.com/questions/42548902
复制相似问题