2017-07-10 1 views
1

J'essaye de peupler RecyclerView avec AppWidgetHostViews mais je ne suis pas vraiment sûr comment faire cela. J'ai trouvé un moyen de créer un LinearLayout, de le lancer sur ViewGroup et d'appeler viewList.add (hostView). Je voudrais créer à la place RecyclerView et c'est la façon dont j'ai essayé:Comment remplir RecyclerView avec AppWidgetHostViews?

Ceci est mon xml:

Ceci est mon adaptateur:

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) { 
     // ? 
    } 

} 

}

Et à l'intérieur de mon fragment:

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); 

L'objet événement est AppWidgetHostView .. Je ne sais pas comment le convertir pour le lier dans la méthode onBindViewHolder() ... Existe-t-il une méthode dans l'objet View que je peux appeler pour le transmettre AppWidgetHostView, comme ViewGroup() méthode?

Répondre

1

J'ai trouvé une solution, peut-être ce n'est pas la meilleure façon, mais cela fonctionne ..

J'ai remplacé Voir avec FrameLayout intérieur XML et changé 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); 
    } 

}