我创建了一个自定义适配器,其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;
}
}
答案 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秒内解决此问题。