2015-08-29 33 views
2

我的数据格式是这样使用根对象recyclerview并希望使用foo3作为recyclerview列表视图这个
{"foo1":"bar1","foo2":["bar2","bar3","bar4"]} ,{"foo1":"bar5","foo2":["bar6","bar7","bar8"]}如何在recyclerview中使用listview?

我'。这是可能的和如何? recyclerview列表项的布局

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:id="@+id/tvFoo1Value" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 


    <ListView 
     android:id="@+id/lvFoo2Values" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

ViewHolder是这样

public class FooViewHolder extends RecyclerView.ViewHolder { 
public final View mView; 
public final TextView tvFoo1Value; 
public final ListView lvFoo2Values; 

public ChallengeViewHolder(View view) { 
    super(view); 
    mView = view; 
    this.tvFoo1Value = (TextView) view.findViewById(R.id.tvFoo1Value); 
    this.lvFoo2Values = (ListView) view.findViewById(R.id.lvFoo2Values); 
}} 

而且ViewAdapter是

public class FooRecyclerViewAdapter extends RecyclerView.Adapter<FooViewHolder> { 
.. 
private View view; 

    @Override 
public FooViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    Context ctx = parent.getContext(); 
    view = LayoutInflater.from(ctx) 
      .inflate(R.layout.foo_list_item, parent, false); 

    return new FooViewHolder(view); 
} 
@Override 
public void onBindViewHolder(FooViewHolder holder, int position) { 
    String[] foo2Arr = //comes from service 

    Context ctx = view.getContext(); //?? possible error here i think 

    ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(ctx,android.R.layout.simple_list_item_1,foo2Arr); 
    holder.lvFoo2Values.setAdapter(listAdapter); 
} 
.. 
} 
+0

试试这个[link](http://androhub.com/android-recyclerview/)。 –

+0

谢谢,但链接上没有新的东西,我只是想方设法在recyclerview中显示数组 –

+0

您不应该在另一个可滚动视图内使用可滚动视图。 –

回答

1

首先,你需要的是JSON转换成java对象。您可以使用此任库(GSON,杰克逊等)

你的类可能会是这样的

public class TheJSON { 
    public String foo1; 
    public ArrayList<String> foo2; 
} 

一旦你在Java对象代表的JSON,然后在使用多个视图类型的RecyclerView适配器

public class TheAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 
    private ArrayList<TheJSON> json_collection; 
    private ArrayList<String> the_strings; 
    private ArrayList<int> the_view_types; 

    public TheAdapter(ArrayList<TheJSON> json_collection) { 
     this.json_collection = json_collection; 

     for (int i = 0; i < json_collection; i++) { 
      the_string.add(json_collection.get(i).foo1); 
      the_view_types.add(1); 
      for (int j = 0; j < json_collection.get(i).foo2.size(); j++) { 
       the_string.add(json_collection.get(i).foo2.get(j)); 
       the_view_types.add(2); 
      } 
     } 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     switch (viewType) { 
      case 1: 
       return new Foo1ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.foo1_layout, parent, false)); 

      case 2: 
       return new Foo2ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.foo2_layout, parent, false)); 

      default: 
       return null; 
     } 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     switch (the_view_types.get(position)) { 
      case 1: 
       Foo1ViewHolder foo1ViewHolder = (Foo1ViewHolder) holder; 
       foo1ViewHolder.setText(the_strings.get(position)); 
       break; 

      case 2: 
       Foo2ViewHolder foo2ViewHolder = (Foo2ViewHolder) holder; 
       foo2ViewHolder.setText(the_strings.get(position)); 
       break; 
     } 
    } 

    @Override 
    public int getItemCount() { 
     return the_strings.size(); 
    } 

    @Override 
    public int getItemViewType(int position) { 
     return the_view_types.get(position); 
    } 

    public class Foo1ViewHolder extends RecyclerView.ViewHolder { 
     private TextView tvFoo1Value; 

     public Foo1ViewHolder(View itemView) { 
      super(itemView); 
      tvFoo1Value = (TextView) itemView.findViewById(R.id.tvFoo1Value); 
     } 

     public setText(String text) { 
      tvFoo1Value.setText(text); 
     } 
    } 

    public class Foo2ViewHolder extends RecyclerView.ViewHolder { 
     private TextView tvFoo2Value; 

     public Foo2ViewHolder(View itemView) { 
      super(itemView); 
      tvFoo2Value = (TextView) itemView.findViewById(R.id.tvFoo2Value); 
     } 

     public setText(String text) { 
      tvFoo2Value.setText(text); 
     } 
    } 
} 
+0

我不想在textview中显示,我想在listview中显示,因为我会在其中使用一些样式。对不起,我不问。 –

+0

对不起,我误解了你的问题。通常不推荐在另一个可滚动视图中使用可滚动视图,因为这可能会导致手势检测出现问题。你有没有尝试展开数组并在RecyclerView中使用多个布局? – CodeBeginner

+0

嗯,那么在回收站视图中显示数组的最佳方式是什么?我试图用linearlayout显示,添加动态视图 –