我使用物品清单的回收者视图创建了一个列表视图。每个列表都有包含以下字段的电影名称:
Price (text view - values ranging from 20-100)
Genere (radio button - U/A or spinner)
Availability (text view, values ranging from 10-1000)
duration (spinner - 1/2/3/4 hours or drop down)
Documentary ( radio button - true,false)
feature1 (some UI element to take input values)
feature2 (some UI element to take input values)
feature3(some UI element to take input values)
每个列表项可能包含也可能不包含所有字段。 如果我使用recycleler视图实现它,每个列表将包含这些字段。我如何自定义它以使这些字段可见和GONE取决于电影类型。
这是我的text_row_item.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/list_item_height"
android:layout_marginLeft="@dimen/margin_medium"
android:layout_marginRight="@dimen/margin_medium"
android:gravity="center_vertical">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/element_text"/>
<EditText
android:id="@+id/editText2"
android:layout_width="85dp"
android:layout_height="28dp"
android:ems="10"
android:inputType="numberDecimal" />
<EditText
android:id="@+id/editText3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="numberDecimal" />
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>
这是我的recycler_view_frag.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!--<RadioGroup-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content"-->
<!--android:gravity="center_horizontal"-->
<!--android:orientation="horizontal"-->
<!--android:checkedButton="@+id/linear_layout_rb">-->
<!--<RadioButton android:id="@+id/linear_layout_rb"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:text="@string/linear_layout_manager"/>-->
<!--</RadioGroup>-->
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<!--<RadioGroup-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content"-->
<!--android:gravity="center_horizontal"-->
<!--android:orientation="horizontal"-->
<!--android:checkedButton="@+id/linear_layout_rb">-->
<!--<RadioButton android:id="@+id/linear_layout_rb"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:text="@string/linear_layout_manager"/>-->
<!--</RadioGroup>-->
</LinearLayout>
这是activity_main.xml:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/sample_main_layout">
<ViewAnimator
android:id="@+id/sample_output"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="1">
<ScrollView
style="@style/Widget.SampleMessageTile"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
style="@style/Widget.SampleMessage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/horizontal_page_margin"
android:paddingRight="@dimen/horizontal_page_margin"
android:paddingTop="@dimen/vertical_page_margin"
android:paddingBottom="@dimen/vertical_page_margin"
android:text="@string/intro_message" />
</ScrollView>
<fragment
android:name="com.example.android.common.logger.LogFragment"
android:id="@+id/log_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</ViewAnimator>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray" />
<FrameLayout
android:id="@+id/sample_content_fragment"
android:layout_weight="2"
android:layout_width="match_parent"
android:layout_height="0px" />
</LinearLayout>
要修正哪个部分?
答案 0 :(得分:0)
通过这种方式,您可以解决它。
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private ArrayList<Movie> movies;
public MyAdapter (ArrayList<Movie> movies) {
this.movies=movies;
}
class ViewHolder0 extends RecyclerView.ViewHolder {
...
public ViewHolder0(View itemView){
...
}
}
class ViewHolder1 extends RecyclerView.ViewHolder {
...
public ViewHolder1(View itemView){
...
}
@Override
public int getItemViewType(int position) {
if(movies.get(position).getType()=="brand1"){
return 0;
}
else{
return 1;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case 0: return new ViewHolder0(...);
case 1: return new ViewHolder1(...);
...
}
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
switch (holder.getItemViewType()) {
case 0:
ViewHolder0 viewHolder0 = (ViewHolder0)holder;
...
break;
case 1:
ViewHolder1 viewHolder1 = (ViewHolder1)holder;
...
break;
}
}
}