我试图让自己的基本适配器在ListFragment中动态显示RadioButtons,代码崩溃,我不确切知道原因是什么,但是当我尝试设置适配器时会发生这种情况在ListView.Someone知道我做错了什么?
XML RadioButton:
<?xml version="1.0" encoding="utf-8"?>
<RadioButton xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rbTipo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
ListView的XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</RelativeLayout>
适配器的类:
public class TipoAdapter extends BaseAdapter {
private ArrayList<Tipo> tipos;
private Context context;
public TipoAdapter(Context context,ArrayList<Tipo> tipos) {
this.tipos = tipos;
this.context = context;
}
@Override
public int getCount() {
return tipos.size();
}
@Override
public Tipo getItem(int i) {
return tipos.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder holder;
if(view == null){
view= LayoutInflater.from(context).inflate(R.layout.item_tipo_trilha,viewGroup,false);
holder= new ViewHolder();
holder.rb=(RadioButton) view.findViewById(R.id.rbTipo);
view.setTag(holder);
}else{
holder=(ViewHolder)view.getTag();
}
Tipo b = getItem(i);
holder.rb.setText(b.tipNome);
holder.rb.setTag(i);
return view;
}
private static class ViewHolder{
RadioButton rb;
public ViewHolder() {
}
}
ListFragment类:
public class TiposFragment extends ListFragment {
private ArrayList<Tipo> tipos;
private TipoAdapter tipoAdapter;
private int selecionado;
private ListView listView;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
public void onListItemClick(ListView lv, View v, int position, long id) {
super.onListItemClick(lv, v, position, id);
selecionado = tipoAdapter.getItem(position).tipCod;
for(int i=0;i<lv.getCount();i++){
if(i!=position){
RadioButton rb= (RadioButton) lv.getChildAt(i);
rb.setChecked(false);
}
}
Toast.makeText(getContext(), lv.getChildAt(position).toString(), Toast.LENGTH_SHORT).show();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_tipo_trilha, container, false);
listView=(ListView) view.findViewById(android.R.id.list);
try {
Bundle bundle = getArguments();
if (bundle != null) {
tipos = bundle.getParcelableArrayList("tipos");
}
} catch (Exception e) {
Toast.makeText(getContext(), e.toString(), Toast.LENGTH_LONG).show();
}
if (tipos != null) {
try {
tipoAdapter = new TipoAdapter(getContext(), tipos);
listView.setAdapter(tipoAdapter);
setListAdapter(tipoAdapter);
// Toast.makeText(getContext(),String.valueOf(listaTipos.getCount()),Toast.LENGTH_LONG).show();
} catch (Exception e) {
// Toast.makeText(getContext(), e.toString(), Toast.LENGTH_LONG).show();
Log.d("TAG",e.toString());
Toast.makeText(getContext(),e.toString(),Toast.LENGTH_LONG).show();
}
}
return view;
}
LogCat堆栈跟踪:
05-09 10:23:03.309 909-909/bdes.dcc.joinville.udesc.br.biketrilhas E/AndroidRuntime: FATAL EXCEPTION: main
Process: bdes.dcc.joinville.udesc.br.biketrilhas, PID: 909
java.lang.ClassCastException: java.lang.Integer cannot be cast to br.udesc.joinville.dcc.bdes.adapter.TipoAdapter$ViewHolder
at br.udesc.joinville.dcc.bdes.adapter.TipoAdapter.getView(TipoAdapter.java:52)
at android.widget.AbsListView.obtainView(AbsListView.java:2396)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1290)
at android.widget.ListView.onMeasure(ListView.java:1202)
at android.view.View.measure(View.java:17834)
at android.widget.RelativeLayout.measureChild(RelativeLayout.java:698)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:482)
at android.view.View.measure(View.java:17834)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5725)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17834)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5725)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17834)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5725)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
at android.view.View.measure(View.java:17834)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5725)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17834)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5725)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17834)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5725)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17834)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5725)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2848)
at android.view.View.measure(View.java:17834)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2030)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1174)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1395)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1062)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5873)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5753)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
答案 0 :(得分:0)
适配器中不兼容的类型将导致崩溃。例如,这包括尝试在适配器输出的TextView中显示一个数字,而不是使用“Integer.toString(i);”正确地转换它。
答案 1 :(得分:0)
1。在TiposFragment.java
中,将所有getContext()
替换为getActivity()
。
2. 从onCreateView()
:
listView = (ListView) view.findViewById(android.R.id.list);
listView.setAdapter(tipoAdapter);
更新TiposFragment
,如下所示:
public class TiposFragment extends ListFragment {
private ArrayList<Tipo> tipos;
private TipoAdapter tipoAdapter;
private int selecionado;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
public void onListItemClick(ListView lv, View v, int position, long id) {
super.onListItemClick(lv, v, position, id);
selecionado = tipoAdapter.getItem(position).tipCod;
for(int i=0;i<lv.getCount();i++){
if(i!=position){
RadioButton rb= (RadioButton) lv.getChildAt(i);
rb.setChecked(false);
}
}
Toast.makeText(getActivity(), lv.getChildAt(position).toString(), Toast.LENGTH_SHORT).show();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_tipo_trilha, container, false);
try {
Bundle bundle = getArguments();
if (bundle != null) {
tipos = bundle.getParcelableArrayList("tipos");
}
} catch (Exception e) {
Toast.makeText(getActivity(), e.toString(), Toast.LENGTH_LONG).show();
}
if (tipos != null) {
try {
tipoAdapter = new TipoAdapter(getActivity(), tipos);
setListAdapter(tipoAdapter);
} catch (Exception e) {
Log.d("TAG",e.toString());
Toast.makeText(getActivity(), e.toString(),Toast.LENGTH_LONG).show();
}
}
return view;
}
这是一个很好的tutorial。
希望这会有所帮助〜