【问题标题】:Add item to ListView using the ListAdapter使用 ListAdapter 将项目添加到 ListView
【发布时间】:2016-03-02 17:24:18
【问题描述】:

大家晚上好,

我正在开发一个 android 应用程序,并且我有一个(自定义)ListView 以及一个自定义 ListAdapter。当我尝试通过在 ListAdapter 上调用 .add() 向 ListView 添加数据时,应用程序立即崩溃。我尝试将 ListAdapter 的数据类型更改为 ArrayList,但这并没有解决问题。

我的 ListAdapter 的代码:

class DeviceListAdapter extends ArrayAdapter<Device> {

public DeviceListAdapter(Context context, Device[] data) {
    super(context, R.layout.device_row, data);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater li = LayoutInflater.from(getContext());
    View cv = li.inflate(R.layout.device_row, parent, false);

    Device dataItem = getItem(position);
    TextView nameTextView = (TextView)cv.findViewById(R.id.nameTextView);
    //TextView statusTextView = (TextView)cv.findViewById(R.id.statusTextView);
    ImageView screenImageView = (ImageView)cv.findViewById(R.id.screenImageView);

    nameTextView.setText((String)dataItem.Name);
    Picasso.with(getContext()).load((String)dataItem.ImageUrl).into(screenImageView);

    return cv;
}

}

初始化适配器和列表视图:

    Device[] data = new Device[]{};

    arad = new DeviceListAdapter(this, data);
    ListView deviceListView = (ListView) findViewById(R.id.listView);
    deviceListView.setAdapter(arad);

    deviceListView.setOnItemClickListener(
            new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    String[] clickdata = (String[]) parent.getItemAtPosition(position);
                    Toast.makeText(HomeActivity.this, clickdata[0], Toast.LENGTH_LONG).show();
                }
            }
    );

尝试向列表视图添加项目:

arad.clear();
arad.add(devices);

编辑:对代码进行了一些更改,现在使用自定义设备类而不是 Object[]

【问题讨论】:

  • devices 是什么?可以加代码吗?
  • 错误是什么??????

标签: java android listview android-listview listadapter


【解决方案1】:

代替

arad.add(devices.toArray());

试试,

arad.addAll(devices.toArray());

【讨论】:

    【解决方案2】:

    我从来没有使用过这样的适配器,我认为你应该在代码中添加名为data 的数组,然后通知适配器。

    data.add("Item X");//data.addAll(devices.toArray());
    data.add("Item Y");
    arad.notifyDataSetChanged(); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 2013-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-31
      相关资源
      最近更新 更多