2012-05-27 13 views
0

我想弄清楚为什么,但我不知道。我看着,看着,我确信我输入了所有我想要的东西。我将在下面发布我的代码。我的适配器为我的ListView给了我这个错误:UnsupportedOperationException:addView(视图,LayoutParams)不支持在AdapterView

适配器类别:

public class MyAgendaAdapter extends BaseAdapter { 
    ArrayList<Agenda> agendas = new ArrayList<Agenda>(); 

public MyAgendaAdapter() { 
    agendas.add(new Agenda()); 
} 

@Override 
public int getCount() { 
    return agendas.size(); 
} 

@Override 
public Object getItem(int position) { 
    return agendas.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    if(convertView == null) { 
     LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
     convertView = inflater.inflate(R.layout.agenda, parent, false); 
    } 

    Agenda agenda = agendas.get(position); //get the agenda from the ArrayList 

    TextView nameTextView = (TextView) convertView.findViewById(R.id.agenda_name); 
    nameTextView.setText(agenda.getEvent()); 

    TextView timeTextView = (TextView) convertView.findViewById(R.id.agenda_time); 
    timeTextView.setText(agenda.getTime()); 

    TextView locationTextView = (TextView) convertView.findViewById(R.id.agenda_location); 
    locationTextView.setText(agenda.getLocation()); 



    return convertView; 
    } 

} 

主要活动类:

public class MainDisplayActivity extends Activity { 
    MyAgendaAdapter agendaAdapter; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ListView list = (ListView) findViewById(R.id.agenda_list); 
    agendaAdapter = new MyAgendaAdapter(); 
    list.setAdapter(agendaAdapter); 
    } 

} 

予省略了进口。假设我的布局和ID是正确的,没有人知道这个问题是什么?

编辑(在logcat中精确的错误):

编辑
05-27 17:29:54.839: W/dalvikvm(1065): threadid=1: thread exiting with uncaught exception(group=0x409c01f8) 
05-27 17:29:54.860: E/AndroidRuntime(1065): FATAL EXCEPTION: main 
05-27 17:29:54.860: E/AndroidRuntime(1065): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.zeroe/com.zeroe.MainDisplayActivity}: java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at android.app.ActivityThread.access$600(ActivityThread.java:123) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at android.os.Looper.loop(Looper.java:137) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at java.lang.reflect.Method.invoke(Method.java:511) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at dalvik.system.NativeStart.main(Native Method) 
05-27 17:29:54.860: E/AndroidRuntime(1065): Caused by: java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at android.widget.AdapterView.addView(AdapterView.java:471) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:743) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:742) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:742) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at android.app.Activity.setContentView(Activity.java:1835) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at com.zeroe.MainDisplayActivity.onCreate(MainDisplayActivity.java:21) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at android.app.Activity.performCreate(Activity.java:4465) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
05-27 17:29:54.860: E/AndroidRuntime(1065):  ... 11 more 

回答

1

所以之后的谈话编辑MyAgendaAdapter类和编辑它conctructor这样

public MyAgendaAdapter(Context c) { 
    this.context = c; 
    agendas.add(new Agenda()); 
} 

所以你将有:

public class MyAgendaAdapter extends BaseAdapter { 

    Context context; 
    ArrayList<Agenda> agendas = new ArrayList<Agenda>(); 

public MyAgendaAdapter() { 
    agendas.add(new Agenda()); 
} 
... 

然后添加到您的getView方法

LayoutInflater inflater = LayoutInflater.from(context); 
if(convertView == null) { 
     convertView = inflater.inflate(R.layout.agenda, null); 
    } 

,然后你会这样调用:

ListView list = (ListView) findViewById(R.id.agenda_list); 
    agendaAdapter = new MyAgendaAdapter(this); 
    list.setAdapter(agendaAdapter); 

并告诉我呢。


所以替代方式,其内部类:

public class MainDisplayActivity extends Activity { 
    MyAgendaAdapter agendaAdapter; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ListView list = (ListView) findViewById(R.id.agenda_list); 
    agendaAdapter = new MyAgendaAdapter(); 
    list.setAdapter(agendaAdapter); 
    } 

private class MyAgendaAdapter extends BaseAdapter { 

    ArrayList<Agenda> agendas = new ArrayList<Agenda>(); 

public MyAgendaAdapter() { 
    agendas.add(new Agenda()); 
} 

@Override 
public int getCount() { 
    return agendas.size(); 
} 

@Override 
public Object getItem(int position) { 
    return agendas.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater inflater = getLayoutInflater(); 
    if(convertView == null) { 
     convertView = inflater.inflate(R.layout.agenda, null); 
    } 

    Agenda agenda = agendas.get(position); //get the agenda from the ArrayList 

    TextView nameTextView = (TextView) convertView.findViewById(R.id.agenda_name); 
    nameTextView.setText(agenda.getEvent()); 

    TextView timeTextView = (TextView) convertView.findViewById(R.id.agenda_time); 
    timeTextView.setText(agenda.getTime()); 

    TextView locationTextView = (TextView) convertView.findViewById(R.id.agenda_location); 
    locationTextView.setText(agenda.getLocation()); 



    return convertView; 
    } 

} 

} 
+1

convertView = inflater.inflate(R.layout.agenda,NULL); 这不是正确的工作方式,充气应始终有一个容器/父母,这也将解决您的异常。你应该使用inflater.inflate(R.layout.lay,container,false) – Tobrun

相关问题