- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我使用扩展我的 TableLayout 的适配器时,不知何故我得到了一个 ArithmeticException。我读到当您将一个空的 TableRow 插入 TableLayout 时会遇到此错误,而如果您查看我的代码,它不是空的:
public class NumberPickerAdapter {
private final LayoutInflater inflater;
private final LinearLayout parent;
private final Context context;
private final int amount;
private View.OnClickListener onButtonClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
EventBus.getDefault().postSticky(new NumberButtonClickedEvent((String) v.getTag()));
}
};
public NumberPickerAdapter(Context context, LinearLayout parent, int amount) {
inflater = LayoutInflater.from(context);
this.parent = parent;
this.context = context;
this.amount = amount;
notifyDataSetChanged();
}
public TableLayout getTableLayout() {
TableLayout numberButton = (TableLayout) inflater.inflate(R.layout.table_layout_number_picker, parent, false);
return numberButton;
}
public Button getButtonView(int number) {
Button numberButton = (Button) inflater.inflate(R.layout.button_number, parent, false);
numberButton.setText(String.valueOf(number));
numberButton.setTag(String.valueOf(number));
numberButton.setOnClickListener(onButtonClickListener);
return numberButton;
}
public TableRow getTableRowView() {
TableRow tableRowView = (TableRow) inflater.inflate(R.layout.table_row_number, parent, false);
return tableRowView;
}
public void notifyDataSetChanged() {
TableLayout tableLayout = getTableLayout();
TableRow parentRow = getTableRowView();
for(int i = 1; i <= amount; i++){
if(i % 4 == 1 && i != 1){
tableLayout.addView(parentRow);
parentRow = getTableRowView();
}
parentRow.addView(getButtonView(i));
}
tableLayout.addView(parentRow);
parent.addView(tableLayout);
}
}
我这样调用适配器的地方:
numberPickDialog = new AlertDialog.Builder(this).create();
LinearLayout customView = (LinearLayout) View.inflate(this, R.layout.dialog_pick_number, null);
numberPickDialog.setView(customView);
new NumberPickerAdapter(this, customView, 20);
numberPickDialog.show();
错误发生在:
numberPickDialog.show();
我得到的完整日志:
05-19 11:25:53.259 32518-32518/raakict.android.growthapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: raakict.android.growthapp, PID: 32518
java.lang.ArithmeticException: divide by zero
at android.widget.TableLayout.mutateColumnsWidth(TableLayout.java:587)
at android.widget.TableLayout.shrinkAndStretchColumns(TableLayout.java:576)
at android.widget.TableLayout.measureVertical(TableLayout.java:474)
at android.widget.TableLayout.onMeasure(TableLayout.java:439)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2615)
at android.view.View.measure(View.java:17547)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2015)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1148)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1379)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
编辑
由于无法解释,我替换了 NotifyDatasetChanged 算法并且它起作用了:
public void notifyDataSetChanged() {
TableLayout layout = getTableLayout();
for (int row = 0; row < amount / cols; ++row) {
TableRow rowView = getTableRowView(layout);
for (int col = 0; col < cols; ++col) {
rowView.addView(getButtonView(rowView, row * cols + col + 1));
}
layout.addView(rowView);
}
parent.addView(layout);
}
最佳答案
经过大量橡皮鸭调试和同事的一些帮助,我们发现了问题所在。
显然我的改变比我想象的要多。两种算法都没有问题,都可以正常工作,但后者可能更好一些,因为您可以设置所需的列数。
我遇到的问题是膨胀代码。我经常使用父 LinearLayout,这也使该布局成为父布局,而不是我最终想将其添加到的 RowLayout/TableLayout。
所以我将完整的适配器更改为:
public class NumberPickerAdapter {
private final LayoutInflater inflater;
private final LinearLayout parent;
private final Context context;
private final int amount;
private final int cols;
private View.OnClickListener onButtonClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
EventBus.getDefault().postSticky(new NumberButtonClickedEvent((String) v.getTag()));
}
};
public NumberPickerAdapter(Context context, LinearLayout parent, int amount, int cols) {
inflater = LayoutInflater.from(context);
this.parent = parent;
this.context = context;
this.amount = amount;
this.cols = cols;
notifyDataSetChanged();
}
public TableLayout getTableLayout() {
TableLayout numberButton = (TableLayout) inflater.inflate(R.layout.table_layout_number_picker, parent, false);
return numberButton;
}
public Button getButtonView(ViewGroup parent, int number) {
Button numberButton;
else
numberButton = (Button) inflater.inflate(R.layout.button_number, parent, false);
numberButton.setText(String.valueOf(number));
numberButton.setTag(String.valueOf(number));
numberButton.setOnClickListener(onButtonClickListener);
return numberButton;
}
public TableRow getTableRowView(ViewGroup parent) {
TableRow tableRowView = (TableRow) inflater.inflate(R.layout.table_row_number, parent, false);
return tableRowView;
}
public void notifyDataSetChanged() {
TableLayout layout = getTableLayout();
for (int row = 0; row < amount / cols; ++row) {
TableRow rowView = getTableRowView(layout);
for (int col = 0; col < cols; ++col) {
rowView.addView(getButtonView(rowView, row * cols + col + 1));
}
layout.addView(rowView);
}
parent.addView(layout);
}
}
现在可以了:)
关于android - 用行和单元格填充 TableLayout 时出现 ArithmeticException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30321460/
我已经为数据表实现了 LazyLoading。当我使用分页浏览数据表时,出现以下异常。 com.sun.faces.context.PartialViewContextImpl processPart
这个问题已经有答案了: Operator precedence in Java (3 个回答) 已关闭 4 年前。 当我尝试编写真值表时,我试图找出算法,然后我发现了一个可行的算法。但是现在我不明白为
该程序可以正确计算带分数。我希望 while 循环在输入两个零后终止。但是,当我输入由空格分隔的两个零时,我得到“Exception in thread "main"java.lang.Arithme
我有一个 JAVA(在 Android 上运行)方法,它偶尔会因被零除而捕获 ArithmeticException,尽管变量 inSampleSize 在循环之前设置为 1,并且每次只乘以 2。以下
我正在用 Java 做这个数独求解器,由于某种原因,我的代码中有一个我无法修复的错误。我的代码有一个 guess 函数,它在检查每个框中的 1-9 数字的同时检查数字是否已经写入。 错误在行中: e
这个问题在这里已经有了答案: try-catch for division by zero (7 个答案) 关闭 7 年前。 我一定是做了什么蠢事。但我似乎无法弄清楚为什么这个简单的代码不起作用。
我想使用标准的 java MonetaryConversions 来转换货币。 乍一看它工作得很好而且简单: @Test public void testConversion()
@Override public StreamObserver mdtDialout(StreamObserver responseObserver) { return new StreamO
我想修改ArithmeticException输出消息。因此,为此我做了一些实验。我通过 ExtenderClass 类扩展了 ArithmeticException 类。这个问题的重点不仅在于找到修
为什么这段代码不抛出ArithmeticException?看看: public class NewClass { public static void main(String[] args)
该方法的目的是迭代一个名为 grid[][] 的二维整数数组,并根据最大和最小值将整数转换为 100 到 250 之间的较小范围(原来的最小值变为 100 ,原来的最大值变成250,中间的一切都分别计
我在解决从 Student 类中的 getAverageScore() 方法中获取的 ArithmeticException 时遇到问题。我正在尝试编写一个程序来读取以下文本文件 scores.txt
我正在使用计算器并使用 NetBeans GUI 生成器,因此它可能有点不清楚和令人困惑。(完整代码 http://pastebin.com/ZLcM74ZQ ,因为它太长了) package rec
我正在研究一种算法来检查数字是否为质数,并且需要处理非常大的数字,因此我正在使用 BigInteger 类。问题是抛出此异常ArithmeticException BigInteger 会溢出支持的范
我正在用JUnit练习,这是我想测试的简单方法 public float divide(int a, int b){ return (float)a/(float)b; } 这是测试(Ma
我对整个捕获处理异常概念有点陌生,我想知道为什么抛出 ArithmeticException 不会在退出时产生异常错误消息(在本例中/为零),而是在编译期间产生异常错误消息。 不应该正常编译然后在屏幕
我们在客户机器上的以下行中得到一个ArithmeticException(算术运算中上溢或下溢。)。我们无法在任何 PC(客户或我们的)上复制它: var actualFullness = (byte
下面的代码执行时没有任何歧义的编译错误,输出是“ArithmeticException”。各位大侠能帮我看看原因吗。 class Test { public static void main(
我正在尝试在 Android 应用程序中实现 RSA 算法。我正在使用 java.math.BigInteger.modPow() 函数进行加密/解密,它适用于我的计算机(Windows 和 Xubu
这只发生在 x64 版本中 An unhandled exception of type 'System.ArithmeticException' occurred in WindowsBase.dl
我是一名优秀的程序员,十分优秀!