在 android 列表视图中编辑项目

Posted

技术标签:

【中文标题】在 android 列表视图中编辑项目【英文标题】:Edit an item in android list view 【发布时间】:2017-09-13 04:50:36 【问题描述】:

我是 android 开发新手,我有一个简单的问题, 我用ArrayAdapter 和一些字符串组成了一个ListView。 我希望在单击项目时更改该项目的文本(或任何其他属性,例如文本颜色)! 我这样做:

private AdapterView.OnItemClickListener MshowforItem = new AdapterView.OnItemClickListener() 
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) 

        ((TextView)view).setText("Hello");
    
;

因此,当我单击任何项​​目时,它的文本会发生变化,但是当我向下/向上滚动然后转到该位置时,该项目的文本会更改为默认值!! 我该怎么办??????

【问题讨论】:

更新列表和notifyDataSetChanged()中的值,告诉我你如何设置适配器的代码 【参考方案1】:

一行你需要写yourArrayListData.set(position, your_model_new_data ));

详情

当您滚动 ListView 内部发生的事情时,这是非常无能为力的。

另一种图像表示...

所以你的问题是回收。当您向上滚动时,最上面的视图变得不可见。 当您向下滚动时,顶视图再次可见。并且它的数据得到你第一次初始化的表格模型。

因此您不会在 EditText 中返回已编辑的文本

我不是在描述更多,而是你的解决方案......

有很多方法...但是我认为您可以做到最好...

当您在项目中设置值时更新您的数据源单击一行

private AdapterView.OnItemClickListener MshowforItem = new AdapterView.OnItemClickListener() 
  @Override
  public void onItemClick(AdapterView<?> parent, View view, int position, long id) 

    ((TextView)view).setText("Hello");

     yourArrayListData.set(position, your_model_new_data ));
  
;

您的示例代码..

//Suppose your model like this
public class Greetings 
    public String message;

    public Greetings(String message) 
        this.message = message;
    

//So your ArrayList like 
ArrayList<Greetings> greetings = new ArrayList<Greetings>();

//You need to write code in one line like
greetings.set(position, new Greetings("hello") ));

就是这样......祝你好运......

【讨论】:

谢谢,成功了。最好的解决方案是编辑主数据源。【参考方案2】:

Listview 从我们在创建 ArrayAdapter 时提供的数据集 [ String Array ] 中填充。我们必须更新那个字符串数组的数据来持久化文本的变化。

代码:

    public class listviewActivity extends AppCompatActivity 
    ListView listView;

    String dataset[] = "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data";

    ArrayAdapter<String> arrayAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listview);
        listView = (ListView) findViewById(R.id.listview);
        arrayAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, dataset);
        listView.setAdapter(arrayAdapter);
        listView.setOnItemClickListener(MshowforItem);
    

    private AdapterView.OnItemClickListener MshowforItem = new AdapterView.OnItemClickListener() 
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
            TextView tvTemp = ((TextView) view);

            dataset[position] = "Hello";
            tvTemp.setText(dataset[position]);

            arrayAdapter.notifyDataSetChanged();
        
    ;
   

【讨论】:

以上是关于在 android 列表视图中编辑项目的主要内容,如果未能解决你的问题,请参考以下文章

如何从android的listview中的不同项目获取数据

通过编辑文本可搜索的列表视图

Android列表视图setOnItemClickListener不起作用

无法在部分列表视图中编辑/删除正确的项目

在 Android 中加载动态项目时无法将页脚视图添加到列表视图

Android:从自定义列表视图中单击的按钮获取列表视图项目