Android自定义适配器不适用于RelativeLayout作为根用户

时间:2018-07-10 17:48:20

标签: android android-relativelayout custom-adapter

我创建了一个自定义适配器,其xml的根布局为线性布局。当我尝试将根目录更改为RelativeLayout以在右端添加按钮时,每次我通过按下按钮为适配器充气时,应用程序都会停止工作 这是我的xml,相对布局在运行时不起作用

 <RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/laybackground"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minHeight="@dimen/list_item_height"
android:background="@color/tan_background"
android:orientation="horizontal">
<ImageView
    android:id="@+id/theImage"
    android:layout_width="@dimen/list_item_height"
    android:layout_height="@dimen/list_item_height"/>

<LinearLayout

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_toRightOf="@id/theImage">
<TextView
    android:id="@+id/mokWord"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="16dp"
    android:layout_marginTop="16dp"
    tools:text="mok"
    android:textColor="@android:color/white"/>
<TextView
    android:id="@+id/engWord"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="16dp"
    tools:text="eng"
    android:textColor="@android:color/white"/>
  </LinearLayout>

 </RelativeLayout>

这是我的适配器

public class WordAdapterClass extends ArrayAdapter<MokAndEngClass> {
public int col=0;
public WordAdapterClass(Activity context, @NonNull List<MokAndEngClass> objects,int backroundColor) {
    super(context, 0, objects);
    col=backroundColor;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    View v = convertView;
    if(v==null)
    {

        LayoutInflater lv = LayoutInflater.from(getContext());
        v=lv.inflate(R.layout.englishandmoaki,parent,false);
    }
    MokAndEngClass listItem = getItem(position);
    if(listItem!=null){
    TextView writtenInMok = (TextView)v.findViewById(R.id.mokWord);
    TextView writtenInEng =v.findViewById(R.id.engWord);
    ImageView realtedImage =v.findViewById(R.id.theImage);
    LinearLayout theTextLayout =(LinearLayout) v.findViewById(R.id.laybackground);
    writtenInEng.setText(listItem.getEngWord());
    writtenInMok.setText(listItem.getMokWord());
    if(listItem.putAnImage()==0)
    realtedImage.setVisibility(View.GONE);
    else
    realtedImage.setBackgroundResource(listItem.putAnImage());
    theTextLayout.setBackgroundColor(theTextLayout.getResources().getColor(col));
    }
    return v;
}
}

1 个答案:

答案 0 :(得分:0)

问题是您已将布局类型从LinearLayout更改为RelativeLayout,而没有更改getView()方法中的代码以反映该更改-您仍在尝试投射根目录查看LinearLayout

更改此行代码:

LinearLayout theTextLayout =(LinearLayout) v.findViewById(R.id.laybackground);

RelativLayout theTextLayout =(RelativeLayout) v.findViewById(R.id.laybackground);

一切都应该像以前一样工作。



请注意: 当您将来在SO上发布问题并报告问题时,请明确指出“不起作用”实际上意味着“遇到错误”,因此应从logcat中发布堆栈跟踪。 SO社区将在10秒内解决此问题。