Я пытаюсь следовать this example, чтобы создать WearableListView. У меня проблема с файлом BoxInsetLayout, потому что я получаю ошибку onLayout(), пытаясь отобразить макет. Вот трассировки стека:onLayout error с WearableListView
java.lang.ClassCastException: com.android.layoutlib.bridge.android.support.Adapter$ViewHolder cannot be cast to android.support.wearable.view.WearableListView$ViewHolder
at android.support.wearable.view.WearableListView.getChildViewHolder(WearableListView.java:521)
at android.support.wearable.view.WearableListView$LayoutManager.notifyChildrenAboutProximity(WearableListView.java:762)
at android.support.wearable.view.WearableListView$LayoutManager.performLayoutChildren(WearableListView.java:883)
at android.support.wearable.view.WearableListView$LayoutManager.onLayoutChildren(WearableListView.java:854)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2118)
at android.support.v7.widget.RecyclerView.onLayout_Original(RecyclerView.java:2415)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.support.wearable.view.BoxInsetLayout.onLayout_Original(BoxInsetLayout.java:318)
at android.support.wearable.view.BoxInsetLayout.onLayout(BoxInsetLayout.java)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.render(RenderSessionImpl.java:376)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:428)
at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:350)
at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:510)
at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:498)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:888)
at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:498)
at com.android.tools.idea.rendering.RenderTask.access$600(RenderTask.java:72)
at com.android.tools.idea.rendering.RenderTask$3.call(RenderTask.java:610)
at com.android.tools.idea.rendering.RenderTask$3.call(RenderTask.java:607)
at com.android.tools.idea.rendering.RenderService.runRenderAction(RenderService.java:362)
at com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:607)
at com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:629)
at com.intellij.android.designer.designSurface.AndroidDesignerEditorPanel$6.run(AndroidDesignerEditorPanel.java:480)
at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:320)
at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:310)
at com.intellij.util.ui.update.MergingUpdateQueue$2.run(MergingUpdateQueue.java:254)
at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:269)
at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:227)
at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:217)
at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:238)
at com.intellij.util.Alarm$Request$1.run(Alarm.java:351)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Это мой XML-файл, который содержит WearableListView:
<?xml version="1.0" encoding="utf-8"?>
<android.support.wearable.view.BoxInsetLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/grey"
android:layout_height="match_parent"
android:layout_width="match_parent">
<FrameLayout
android:id="@+id/frame_layout"
android:layout_height="match_parent"
android:layout_width="match_parent"
app:layout_box="left|bottom|right">
<android.support.wearable.view.WearableListView
android:id="@+id/wearable_list"
android:layout_height="match_parent"
android:layout_width="match_parent">
</android.support.wearable.view.WearableListView>
</FrameLayout>
</android.support.wearable.view.BoxInsetLayout>
Кроме того, на мой DevicesListActivity.java у меня есть интерфейс WearableListView.ClickListener реализован, но я получаю нулевой WearableListView объект, когда я пытаюсь получить макет по идентификатору (я думаю, что это происходит потому, что ошибка я уже говорил, но я не уверен):
public class DevicesListActivity extends Activity implements WearableListView.ClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_devices_list);
final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);
stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
@Override
public void onLayoutInflated(WatchViewStub stub) {
}
});
WearableListView listView = (WearableListView) findViewById(R.id.wearable_list);
if (listView == null) {
Log.d("DevicesListActivity", "ListView is null");
} else {
listView.setAdapter(new WearableListViewAdapter("Prueba", "00:00", this));
listView.setClickListener(this);
}
}
@Override
public void onClick(WearableListView.ViewHolder viewHolder) {
Toast.makeText(this, "Clic realizado", Toast.LENGTH_LONG);
}
@Override
public void onTopEmptyRegionClick() {
}
}
Любая помощь?
Заранее спасибо.
Благодарим за помощь. Я опубликовал ответ прямо сейчас с исправлением, которое я нашел. –
Рад, что вы исправили свою проблему с нулевым WearableList, так как для проблем onLayout() мое решение разрешает его, если вы заинтересованы в нем. – mhlsf
Я отметил это как решение. Спасибо еще раз за помощь. –