public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TableView tv = new TableView(this); tv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT)); setContentView(tv); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } } public class TableView extends ViewGroup { private Paint oval; private RectF rect; public TableView(Context context) { super(context); oval= new Paint(Paint.ANTI_ALIAS_FLAG); oval.setColor(Color.GREEN); […]
Android编程中的View和ViewGroup有什么区别?
我们已经发现了由后端日志logging监视报告的这种崩溃的几种情况。 看起来崩溃并不与特定的用户体验失败联系在一起。 从报告来看,我们自己的class级没有任何标志(没有任何class级名称的标志)。 这是一个典型的崩溃的例子: java.lang.NullPointerException: Attempt to read from field 'int android.view.View.mViewFlags' on a null object reference at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3357) at android.view.View.updateDisplayListIfDirty(View.java:14288) at android.view.View.getDisplayList(View.java:14315) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3549) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3528) at android.view.View.updateDisplayListIfDirty(View.java:14253) at android.view.View.getDisplayList(View.java:14315) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3549) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3528) at android.view.View.updateDisplayListIfDirty(View.java:14253) at android.view.View.getDisplayList(View.java:14315) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3549) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3528) at android.view.View.updateDisplayListIfDirty(View.java:14253) at android.view.View.getDisplayList(View.java:14315) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3549) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3528) at android.view.View.updateDisplayListIfDirty(View.java:14253) at android.view.View.getDisplayList(View.java:14315) […]
我有一个ListView与一些可调焦的组件(主要是EditText的)。 是的,我知道这不是完全推荐,但总的来说,几乎所有的东西都运行良好,重点放在了必须去的地方(只需要进行一些调整)。 无论如何,我的问题是用手指滚动列表时出现奇怪的竞态条件,然后在显示IME键盘时突然使用轨迹球。 有些东西必须走出界限,并在此处offsetRectBetweenParentAndChild()方法,并抛出IllegalArgumentException 。 问题是,这个exception抛出任何块,我可以插入try / catch(据我所知)。 所以这个问题有两个有效的解决scheme: 有人知道为什么抛出这个exception,以及如何阻止它发生 有人知道如何把一个try / catch块放在什么地方,至less让我的应用程序能够存活。 据我所知,问题是关注的问题,所以绝对不应该杀死我的应用程序(这是做什么)。 我试图覆盖ViewGroup的方法,但这两个offset*方法被标记为final。 堆栈跟踪: 08-17 18:23:09.825: ERROR/AndroidRuntime(1608): FATAL EXCEPTION: main 08-17 18:23:09.825: ERROR/AndroidRuntime(1608): java.lang.IllegalArgumentException: parameter must be a descendant of this view 08-17 18:23:09.825: ERROR/AndroidRuntime(1608): at android.view.ViewGroup.offsetRectBetweenParentAndChild(ViewGroup.java:2633) 08-17 18:23:09.825: ERROR/AndroidRuntime(1608): at android.view.ViewGroup.offsetDescendantRectToMyCoords(ViewGroup.java:2570) 08-17 18:23:09.825: ERROR/AndroidRuntime(1608): at android.view.ViewRoot.scrollToRectOrFocus(ViewRoot.java:1624) 08-17 18:23:09.825: ERROR/AndroidRuntime(1608): at android.view.ViewRoot.draw(ViewRoot.java:1357) 08-17 […]