我在我的应用程序中使用了RecyclerView支持,我看到了最奇怪的事情.在我触摸滚动之前,它不会显示任何项目.然后,突然之间,RecyclerView会自行填充.我已经确认填充了支持适配器的列表,并且在触摸事件之前永远不会调用onCreatViewHolder和onBindViewHolder.
以下是我设置recyclerview的方法:
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
Drawable divider = new ColorDrawable(ProfileInfo.getCurrentProfileColor());
mInboxList.addItemDecoration(new DividerItemDecoration(getActivity(), divider, false));
mInboxList.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));
mInboxList.setAdapter(new InboxAdapter(getActivity(), new ArrayList<Conversation>()));
new AsyncTask<Void, Void, List<Conversation>{
public List<Conversation> doInBackground(...){
//load the conversations
return conversations;
}
public void onPostExecute(List<Conversation> conversations){
((InboxAdapter) mInboxList.getAdapter()).clear(false);
((InboxAdapter) mInboxList.getAdapter()).addAll(conversations);
}
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
Run Code Online (Sandbox Code Playgroud)
这是我的适配器的要点:
public class InboxAdapter extends RecyclerView.Adapter<InboxAdapter.ViewHolder> {
List<Conversation> mConversations; //initialized in contructor
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = mInflater.inflate(R.layout.inbox_item, parent, false);
ViewHolder holder …
Run Code Online (Sandbox Code Playgroud) 我的应用程序中有一个TTimer,每2秒触发一次,并调用我的事件处理程序HandleTimerEvent().HandleTimerEvent()函数修改共享资源,在返回之前可能需要10秒的时间才能执行.此外,我在事件处理程序中调用Sleep()有时放弃处理器.
我不确定C++构建器的TTimer对象在调用事件时是如何工作的,所以我刚才解释的场景让我思考,尤其是在先前的调用返回之前是否调用了HandleTimerEvent().
问题归结为几件事.
TTimer对象是否对事件进行排队?
在先前的调用返回之前,TTimer对象是否可以调用我的事件处理程序?
我正在使用android支持库v4修订版11并不时,我看到下面的堆栈跟踪; 我怀疑它是由于从最近发布而发生的,因此我尝试访问的模型为空.无论如何,这个跟踪让我想知道为什么在活动被销毁时调用onCreateView,以及处理这种情况的最佳方法是什么?
java.lang.NullPointerException
at com.example.dialogs.ExampleDialogFragment.onCreateView(ExampleDialogFragment.java:53)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070)
at android.support.v4.app.FragmentManagerImpl.dispatchReallyStop(FragmentManager.java:1888)
at android.support.v4.app.FragmentActivity.onReallyStop(FragmentActivity.java:787)
at android.support.v4.app.FragmentActivity.doReallyStop(FragmentActivity.java:764)
at android.support.v4.app.FragmentActivity.onDestroy(FragmentActivity.java:322)
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3642)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3673)
at android.app.ActivityThread.access$2900(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
崩溃后,后台堆栈中的活动恢复,我会检查模型在活动中是否有效onResume()
,onStart()
并且onCreate(Bundle savedInstanceState)
.如果模型无效,我从那里开始另一个活动FLAG_ACTIVITY_NO_HISTORY
,呼叫finish()
和return;
例如
@Override
public void onResume() {
Model cm = Application.getModel();
final boolean isModelAvailable = cm != null;
if (!isModelAvailable) { …
Run Code Online (Sandbox Code Playgroud) 在构建项目时,我看到以下编译器警告:
warning: Method references using '.' is deprecated. Instead of 'item.onCardClicked', use 'item::onCardClicked'
我使用android插件gradle 2.1.0.
我的布局文件如下所示:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="item"
type="com.example.Card"/>
</data>
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:onClick="@{item.onCardClicked}"/>
...
</LinearLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
有人能指出我正确的方向来解决这个警告吗?
使用Android的新数据绑定库,您可以在xml布局中编写内联表达式。例如,您可以这样设置视图的可见性:
<TextView
android:text="@{user.lastName}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="@{user.isAdult ? View.VISIBLE : View.GONE}"/>
Run Code Online (Sandbox Code Playgroud)
我该如何进行单元/布局测试?我想确保当user.isAdult为true和false时可见性正确切换。
例如,我一直在考虑在定位最新API并将min SDK设置为7时使用Android支持包的优缺点.
在Android文档指出:"我们的目标是通过提供更多的API,你可以与你的应用程序中捆绑,以简化你的发展,你可以少担心平台的版本"; 但是,我对它是否会变得更简单有疑问.
考虑TabActivity,它已被弃用.使用TabActivity的替代方法是通过Fragments,通过查看示例以获得表格视图,它看起来并不简单.此外,在决定使用Fragments类和FragmentActivity类时,我还是必须使用反射,所以为什么不使用TabActivity.我希望得到你的意见.我倾向于不使用它,但我想知道我是否错过了任何好处.
我想执行需要相邻像素的图像处理操作,但我不确定如何从分配中访问它们.我见过的大多数内核都在单个像素上运行,更新它,然后返回它.有没有办法可以在下面的方法中访问(x,y)的邻居.
uchar4 __attribute__((kernel)) invert(uchar4 in, uint32_t x, uint32_t y) {
uchar4 neighbor = allocation[x+1][y]; // How do I do this in renderscript?
uchar4 otherNeighbor = allocation[x-1][y];
...
}
Run Code Online (Sandbox Code Playgroud)