在 Android 中动态填充对象的列表视图
Populating List View of Objects dynamically in Android
我在网上查阅了一些教程,但认为以下是最好的方法。
我的 Activity 只包含一个文本字段 (editText
) 和一个列表视图 (roomlv
)
- 代码
列表中包含的对象是RoomCell
个对象
我的Class有以下变量
public class RoomsActivity extends ActionBarActivity {
ListView listview2;
RoomCell[] roomcells = {rc1, rc2, rc3, rc4, rc5, rc6, rc7, rc8, rc9};
//where rc1, rc2, ... are predefined objects
RoomCell[] finalcells = roomcells;
RoomListAdapter rla;
我的 onCreate 方法如下所示:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rooms);
listview2 = (ListView) findViewById(R.id.roomlv);
listview2.setClickable(true);
listview2.setOnItemClickListener(onListClick2);
EditText filterText = (EditText) findViewById(R.id.editText);
filterText.addTextChangedListener(filterTextWatcher);
rla = new RoomListAdapter(this, finalcells);
listview2.setAdapter(rla);
}
我的 TextWatcher 是这样工作的:
private TextWatcher filterTextWatcher = new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if(s.length()==0){
finalcells = roomcells;
rla.notifyDataSetChanged();
}else{
finalcells = filterList(roomcells, s);
rla.notifyDataSetChanged();
}
}
};
为方便起见,此处省略了其他 2 个覆盖方法。
filterList()
方法 returns 过滤后的数组(我相信这个工作正常,但如果需要我会粘贴代码)
最后 OnClick
代码在这里:
private AdapterView.OnItemClickListener onListClick2 = new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
GlobVar.roomtitle = finalcells[position].name;
GlobVar.roomsize = finalcells[position].size;
Intent i = new Intent(RoomsActivity.this, TheRoomActivity.class);
startActivity(i);
}
};
其中 2 个全局变量被分配给单击的单元格的特定值。
- 问题
编辑文本字段没有任何区别,单击单元格会使我的程序崩溃?
我检查了我的代码无数次,但找不到任何错误。
提前感谢您的帮助。
您需要致电:
rla = new RoomListAdapter(RoomsActivity.this, finalcells);
listview2.setAdapter(rla);
调用前:
rla.notifyDataSetChanged();
在您的 onTextChanged
方法中,因为每次您输入 EditText
时它都会有新的过滤对象
我在网上查阅了一些教程,但认为以下是最好的方法。
我的 Activity 只包含一个文本字段 (editText
) 和一个列表视图 (roomlv
)
- 代码
列表中包含的对象是RoomCell
个对象
我的Class有以下变量
public class RoomsActivity extends ActionBarActivity {
ListView listview2;
RoomCell[] roomcells = {rc1, rc2, rc3, rc4, rc5, rc6, rc7, rc8, rc9};
//where rc1, rc2, ... are predefined objects
RoomCell[] finalcells = roomcells;
RoomListAdapter rla;
我的 onCreate 方法如下所示:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rooms);
listview2 = (ListView) findViewById(R.id.roomlv);
listview2.setClickable(true);
listview2.setOnItemClickListener(onListClick2);
EditText filterText = (EditText) findViewById(R.id.editText);
filterText.addTextChangedListener(filterTextWatcher);
rla = new RoomListAdapter(this, finalcells);
listview2.setAdapter(rla);
}
我的 TextWatcher 是这样工作的:
private TextWatcher filterTextWatcher = new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if(s.length()==0){
finalcells = roomcells;
rla.notifyDataSetChanged();
}else{
finalcells = filterList(roomcells, s);
rla.notifyDataSetChanged();
}
}
};
为方便起见,此处省略了其他 2 个覆盖方法。
filterList()
方法 returns 过滤后的数组(我相信这个工作正常,但如果需要我会粘贴代码)
最后 OnClick
代码在这里:
private AdapterView.OnItemClickListener onListClick2 = new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
GlobVar.roomtitle = finalcells[position].name;
GlobVar.roomsize = finalcells[position].size;
Intent i = new Intent(RoomsActivity.this, TheRoomActivity.class);
startActivity(i);
}
};
其中 2 个全局变量被分配给单击的单元格的特定值。
- 问题
编辑文本字段没有任何区别,单击单元格会使我的程序崩溃?
我检查了我的代码无数次,但找不到任何错误。
提前感谢您的帮助。
您需要致电:
rla = new RoomListAdapter(RoomsActivity.this, finalcells);
listview2.setAdapter(rla);
调用前:
rla.notifyDataSetChanged();
在您的 onTextChanged
方法中,因为每次您输入 EditText