编辑android列表视图中的项目

时间:2017-09-13 04:50:36

标签: android listview view adapter

我是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");
    }
};

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

2 个答案:

答案 0 :(得分:2)

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

详细

当您滚动ListView内部非常无能为力的内容时。

enter image description here

另一种图像表示......

enter image description here

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

因此,您不会在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();
        }
    };
   }