在 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列表视图setOnItemClickListener不起作用