如何使用 AppWidgetHostViews 填充 RecyclerView?
How to populate RecyclerView with AppWidgetHostViews?
我正在尝试使用 AppWidgetHostViews 填充 RecyclerView,但我不太确定该怎么做。我找到了一种创建 LinearLayout 的方法,将其转换为 ViewGroup 并调用 viewList.add(hostView)。我想改为创建 RecyclerView,这是我尝试的方式:
这是我的 xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<View
android:id="@+id/appWidget"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
这是我的适配器:
public class AppWidgetAdapter extends RecyclerView.Adapter<AppWidgetAdapter.AppWidgetHolder> {
private List<View> viewList = new ArrayList<>();
public void setData(List<View> list) {
viewList.clear();
viewList.addAll(list);
notifyDataSetChanged();
}
@Override
public AppWidgetHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.app_widget_layout, parent, false);
return new AppWidgetHolder(view);
}
@Override
public void onBindViewHolder(AppWidgetHolder holder, int position) {
View view = getItem(position);
holder.setView(view);
}
private View getItem(int position) {
return !viewList.isEmpty() ? viewList.get(position) : null;
}
@Override
public int getItemCount() {
return viewList.size();
}
class AppWidgetHolder extends RecyclerView.ViewHolder {
private View view;
AppWidgetHolder(View itemView) {
super(itemView);
view = (View) itemView.findViewById(R.id.app_widget);
}
private void setView (View view) {
// ?
}
}
}
在我的片段中:
private List<View> viewList = new ArrayList<>();
mAdapter = new AppWidgetAdapter();
mRecycler.setLayoutManager(new LinearLayoutManager(getActivity()));
mRecycler.setAdapter(mAdapter);
viewList.add((View) event.eventObject);
mAdapter.setData(viewList);
Event 对象是 AppWidgetHostView..我不知道如何转换它以将其绑定到 onBindViewHolder() 方法中...我可以调用 View 对象中的方法来将其传递给 AppWidgetHostView,例如 ViewGroup 已添加() 方法?
我找到了一个解决方案,也许这不是最好的方法,但它确实有效..
我用 XML 中的 FrameLayout 替换了 View,并更改了我的 ViewHolder:
class AppWidgetHolder extends RecyclerView.ViewHolder {
private FrameLayout view;
AppWidgetHolder(View itemView) {
super(itemView);
view = (FrameLayout) itemView.findViewById(R.id.app_widget);
}
private void setView (View view) {
if(view.getParent() != null) {
((ViewGroup)view.getParent()).removeView(view);
}
this.view.addView(view);
}
}
我正在尝试使用 AppWidgetHostViews 填充 RecyclerView,但我不太确定该怎么做。我找到了一种创建 LinearLayout 的方法,将其转换为 ViewGroup 并调用 viewList.add(hostView)。我想改为创建 RecyclerView,这是我尝试的方式:
这是我的 xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<View
android:id="@+id/appWidget"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
这是我的适配器:
public class AppWidgetAdapter extends RecyclerView.Adapter<AppWidgetAdapter.AppWidgetHolder> {
private List<View> viewList = new ArrayList<>();
public void setData(List<View> list) {
viewList.clear();
viewList.addAll(list);
notifyDataSetChanged();
}
@Override
public AppWidgetHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.app_widget_layout, parent, false);
return new AppWidgetHolder(view);
}
@Override
public void onBindViewHolder(AppWidgetHolder holder, int position) {
View view = getItem(position);
holder.setView(view);
}
private View getItem(int position) {
return !viewList.isEmpty() ? viewList.get(position) : null;
}
@Override
public int getItemCount() {
return viewList.size();
}
class AppWidgetHolder extends RecyclerView.ViewHolder {
private View view;
AppWidgetHolder(View itemView) {
super(itemView);
view = (View) itemView.findViewById(R.id.app_widget);
}
private void setView (View view) {
// ?
}
}
}
在我的片段中:
private List<View> viewList = new ArrayList<>();
mAdapter = new AppWidgetAdapter();
mRecycler.setLayoutManager(new LinearLayoutManager(getActivity()));
mRecycler.setAdapter(mAdapter);
viewList.add((View) event.eventObject);
mAdapter.setData(viewList);
Event 对象是 AppWidgetHostView..我不知道如何转换它以将其绑定到 onBindViewHolder() 方法中...我可以调用 View 对象中的方法来将其传递给 AppWidgetHostView,例如 ViewGroup 已添加() 方法?
我找到了一个解决方案,也许这不是最好的方法,但它确实有效..
我用 XML 中的 FrameLayout 替换了 View,并更改了我的 ViewHolder:
class AppWidgetHolder extends RecyclerView.ViewHolder {
private FrameLayout view;
AppWidgetHolder(View itemView) {
super(itemView);
view = (FrameLayout) itemView.findViewById(R.id.app_widget);
}
private void setView (View view) {
if(view.getParent() != null) {
((ViewGroup)view.getParent()).removeView(view);
}
this.view.addView(view);
}
}