android - 如何更改项目点击时 ListView 的内容?

标签 android listview

我有一个使用字符串数组填充的 ListView ,如下所示:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getListView().getContext(),android.R.layout.simple_list_item_1,res);
getListView().setAdapter(adapter);

我想使用 OnItemClickListener 更改 ListView 的内容。

最佳答案

根据您想要如何进行更改,您是希望用户通过提供输入来进行更改,还是希望直接通过代码进行更改。以下 setOnItemClickListener 将新值设置为变量。 为了获取用户的输入,您需要将其填充到 fragment 或新 Activity 中,获取用户的输入并提交这些更改,刷新列表并显示更新的数据。

模型类:

public class Item {

    private String name = "";

    public Item() {
    }

    public Item(String name){
        this.name = name;
    }

    public String getItemName() {
        return name;
    }

    public void setItemName(String name) {
        this.name = name;
    }

}

适配器类:

public class ItemAdapter extends ArrayAdapter<Item> {

    private List<Item> itemList = new ArrayList<Item>();
    Context context;

    @Override
    public void add(Item object) {
        itemList.add(object);
        super.add(object);
    }

    public ItemAdapter(List<Item> rList, Context context) {
        super(context, android.R.layout.simple_list_item_1);
        this.context = context;
        this.itemList = rList;
    }

    private class ViewHolder {
        TextView txtItemName;
    }

    public int getCount() {
        return this.itemList.size();
    }

    public Item getItem(int index) {
        return this.itemList.get(index);
    }

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

        ViewHolder holder = new ViewHolder();

        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.list_item, parent, false);

            holder.txtItemName = (TextView) convertView.findViewById(R.id.txtItemName);

            convertView.setTag(holder);
        } else

            holder = (ViewHolder) convertView.getTag();

        Item item = getItem(position);

        holder.txtItemName.setText(item.getItemName());

        return convertView;
    }

}

Activity 类别:

public class ItemActivity extends Activity {

    private ListView listView;
    private ItemAdapter itemListAdapter;
    private List<Item> itemList = new ArrayList<Item>();

    @Override
    public void onCreate(Bundle savedInstanceState) {

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);

        setContentView(R.layout.list);

        listView = (ListView) findViewById(R.id.listView);

        itemListAdapter = new ItemAdapter(itemList, this);
        listView.setAdapter(itemListAdapter);
        listView.setFastScrollEnabled(true);

        ////////////////////////////////////////////////
        // add some items
        itemList.add(new Item("Charlie"));
        itemList.add(new Item("Jenny"));

        //add new items and changes to adapter
        itemListAdapter.notifyDataSetChanged();

        ////////////////////////////////////////////////

        listView.setOnItemClickListener(new OnItemClickListener(){
            @Override

            public void onItemClick(AdapterView<?> parent, View view, int position, long id){

                String beforeName = itemListAdapter.getItem(position).getItemName().toString();

                String changedName = "Thomas";
                itemListAdapter.getItem(position).setItemName(changedName);

            }

        });
    }
}

关于android - 如何更改项目点击时 ListView 的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30711517/

相关文章:

Android, fragment ListView onItemclick/onitemselect 问题

android - 如何获取 CPU 温度?

android - 在 ListView 中挂起 listSelector

java - 使用 GridView 制作日历

android - 在 Android M 中,来电响铃时更改铃声模式没有任何效果

android - 创建 slider 来更改 android 音量?

c# - 使用 WinAPI 设置 ListViewItem 的选中状态

c# - 如何在 C# 中将 IEnumerable<T> 转换为 List<T>?

java - 使用 TextWatcher 过滤 ListView 会出现 IndexOutOfBoundsException

java - 图像的自定义 ListView 适配器语法