ListView 上的适配器错误
Adapter error on a ListView
我想将包含一些特定数据的新布局添加到 ListView。
我制作了一个扩展了 BaseAdapter 的 class,但是当我尝试将我的数据和上下文(this)放入我的新 class 时,它显示错误
package com.bignner.hotel;
public class MainActivity extends AppCompatActivity {
private Context context;
private ListView Placename;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn= (Button)findViewById(R.id.btnAdd);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Placename =(ListView) findViewById(R.id.ListView);
RadioGroup RG=(RadioGroup)findViewById(R.id.radiogrop);
int SelectedId= RG.getCheckedRadioButtonId();
RadioButton RB= (RadioButton)findViewById(SelectedId);
String textRB=RB.getText().toString();
int place=0;
switch (textRB){
case "Gust-house":
place=R.drawable.g;
break;
case "Apartment":
place=R.drawable.a;
break;
case "Hotel":
place=R.drawable.h;
break;
}
TextView placeName=(TextView)findViewById(R.id.editTextName);
String name=placeName.getText().toString();
TextView placeAddress=(TextView)findViewById(R.id.editTextAddress);
String address=placeAddress.getText().toString();
List<HotelEntry> tourPlace = new ArrayList<HotelEntry>();
tourPlace.add(new HotelEntry(name,place));
Myadapter adapter = new Myadapter(this,tourPlace);
Placename.setAdapter(adapter);
}
});
}
}
还有我的 class:
public class Myadapter extends BaseAdapter {
private Context context;
private List<HotelEntry> hotels;
@Override
public int getCount() {
return hotels.size();
}
@Override
public Object getItem(int position) {
return hotels.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.my_layout,parent,false);
TextView placeName = (TextView) convertView.findViewById(R.id.textViewName);
placeName.setText(hotels.get(position).getHotelName());
ImageView LetterIcon = (ImageView) convertView.findViewById(R.id.imageViewIcon);
LetterIcon.setImageResource(hotels.get(position).getTypeIcon());
return convertView;
}
}
错误在这一行:
Myadapter adapter = new Myadapter(this,tourPlace);
我也用 this 替换了 MainActivity.this,但我仍然看到那个错误。
我不知道为什么以及如何解决。
如果能得到一些帮助,我将不胜感激。
错误:
您还没有应用 Myadapter
class 的构造函数。所以你需要创建它。
public Myadapter(Context context, List<HotelEntry> list) { ... }
并带回 MainActivity.this
- 没有它你试图将你的 OnClickListener
作为构造函数参数。
将 class 的名称放在 this
之前
将适配器移至 onCreate
。添加到列表并在 onClick 中通知适配器。
(可选)也可以将所有 findViewById
移动到 onCreate
,因为每次单击按钮都会影响查找视图的性能。
public class MainActivity extends AppCompatActivity {
List<HotelEntry> tourPlace = new ArrayList<HotelEntry>();
Myadapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// These three lines need to be removed from the onClick
Placename =(ListView) findViewById(R.id.ListView);
Myadapter adapter = new Myadapter(this, tourPlace);
Planename.setAdapter(adapter);
我想将包含一些特定数据的新布局添加到 ListView。
我制作了一个扩展了 BaseAdapter 的 class,但是当我尝试将我的数据和上下文(this)放入我的新 class 时,它显示错误
package com.bignner.hotel;
public class MainActivity extends AppCompatActivity {
private Context context;
private ListView Placename;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn= (Button)findViewById(R.id.btnAdd);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Placename =(ListView) findViewById(R.id.ListView);
RadioGroup RG=(RadioGroup)findViewById(R.id.radiogrop);
int SelectedId= RG.getCheckedRadioButtonId();
RadioButton RB= (RadioButton)findViewById(SelectedId);
String textRB=RB.getText().toString();
int place=0;
switch (textRB){
case "Gust-house":
place=R.drawable.g;
break;
case "Apartment":
place=R.drawable.a;
break;
case "Hotel":
place=R.drawable.h;
break;
}
TextView placeName=(TextView)findViewById(R.id.editTextName);
String name=placeName.getText().toString();
TextView placeAddress=(TextView)findViewById(R.id.editTextAddress);
String address=placeAddress.getText().toString();
List<HotelEntry> tourPlace = new ArrayList<HotelEntry>();
tourPlace.add(new HotelEntry(name,place));
Myadapter adapter = new Myadapter(this,tourPlace);
Placename.setAdapter(adapter);
}
});
}
}
还有我的 class:
public class Myadapter extends BaseAdapter {
private Context context;
private List<HotelEntry> hotels;
@Override
public int getCount() {
return hotels.size();
}
@Override
public Object getItem(int position) {
return hotels.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.my_layout,parent,false);
TextView placeName = (TextView) convertView.findViewById(R.id.textViewName);
placeName.setText(hotels.get(position).getHotelName());
ImageView LetterIcon = (ImageView) convertView.findViewById(R.id.imageViewIcon);
LetterIcon.setImageResource(hotels.get(position).getTypeIcon());
return convertView;
}
}
错误在这一行:
Myadapter adapter = new Myadapter(this,tourPlace);
我也用 this 替换了 MainActivity.this,但我仍然看到那个错误。
我不知道为什么以及如何解决。
如果能得到一些帮助,我将不胜感激。
错误:
您还没有应用 Myadapter
class 的构造函数。所以你需要创建它。
public Myadapter(Context context, List<HotelEntry> list) { ... }
并带回 MainActivity.this
- 没有它你试图将你的 OnClickListener
作为构造函数参数。
将 class 的名称放在 this
之前
将适配器移至 onCreate
。添加到列表并在 onClick 中通知适配器。
(可选)也可以将所有 findViewById
移动到 onCreate
,因为每次单击按钮都会影响查找视图的性能。
public class MainActivity extends AppCompatActivity {
List<HotelEntry> tourPlace = new ArrayList<HotelEntry>();
Myadapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// These three lines need to be removed from the onClick
Placename =(ListView) findViewById(R.id.ListView);
Myadapter adapter = new Myadapter(this, tourPlace);
Planename.setAdapter(adapter);