【问题标题】:Populating List View of Objects dynamically in Android在 Android 中动态填充对象的列表视图
【发布时间】:2015-06-16 14:15:24
【问题描述】:

我在网上查阅了一些教程,但认为以下是最好的方法。

我的活动仅包含一个文本字段 (editText) 和一个列表视图 (roomlv)

  • 代码

列表中包含的对象是RoomCell对象

我的班级有以下变量

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() 方法返回过滤后的数组(我相信这可以正常工作,但如果需要我会粘贴代码)

最后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 个全局变量被分配给单击的单元格的特定值。

  • 问题

编辑文本字段没有任何区别,单击单元格会使我的程序崩溃?

我已经无数次查看我的代码,但找不到任何错误。

提前感谢您的帮助。

【问题讨论】:

    标签: android listview search android-arrayadapter textwatcher


    【解决方案1】:

    您需要致电:

    rla = new RoomListAdapter(RoomsActivity.this, finalcells);
    listview2.setAdapter(rla);
    

    调用前:

    rla.notifyDataSetChanged();
    

    在您的 onTextChanged 方法中,因为每次您输入 EditText 时,它都会有新的过滤对象

    【讨论】:

    • 有道理,在 RoomListAdapter 构造方法中,this 替换成什么
    • this换成RoomsActivity.this,我会更新我的答案。
    • 嗯...这似乎没有任何区别。是否有可能我需要再次添加行listview2.setAdapter(rla)
    • 哦,我忘了,对不起,是的,你需要重新设置适配器。
    • 太棒了!非常感谢您的帮助!
    猜你喜欢
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    相关资源
    最近更新 更多