我是Android开发的新手,我有一个简单的问题,
我用ListView
创建了ArrayAdapter
和一些字符串数组。
我希望当项目点击时,该项目的文本(或任何其他属性,如文本颜色)将被更改!
我是这样做的:
private AdapterView.OnItemClickListener MshowforItem = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
((TextView)view).setText("Hello");
}
};
因此,当我点击任何项目时,它的文本将会改变,但当我向下/向上滚动然后转到该位置时,该项目的文本更改为默认值! 我该怎么办?????
答案 0 :(得分:2)
您需要写一行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") ));
这就是......祝你好运..
答案 1 :(得分:0)
Listview填充我们在创建ArrayAdapter时提供的数据集[String Array]。我们必须更新该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();
}
};
}