列表视图中的项目保存了先前项目的状态

时间:2015-07-27 15:06:32

标签: android android-arrayadapter

我是一名新的Android开发人员,我需要你的帮助。 我创建了一个简单的列表视图。我通过键盘在此列表视图中添加项目。 而且我在项目上添加了动作。当用户点击“确定”时,应用程序将删除文本并将背景设置为绿色。

但是当我添加下一个项目时,我发现它应用了以前项目中的删除和背景选项。

你能告诉我在这种情况下我需要做什么吗?如何改进?

我的代码:

package com.example.boytsov.foodbasketapp;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

/**
 * Created by Boytsov on 23.07.2015.
 */
public class ProductList extends Activity implements View.OnClickListener,AdapterView.OnItemClickListener,AdapterView.OnItemLongClickListener {
    EditText myText;
    ListView lvMain;
    ArrayList<String> catnames;
    ArrayAdapter<String> adapter;
    Button button;
    final String LOG_TAG = "myLogs";
    @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.productlist);

        lvMain = (ListView) findViewById(R.id.lvMain);
        myText = (EditText) findViewById(R.id.editText);
        button=(Button)findViewById(R.id.button);

        catnames= new ArrayList<String>();
        // создаем адаптер
        adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, catnames);

        // присваиваем адаптер списку
        lvMain.setAdapter(adapter);
        lvMain.setOnItemClickListener(this);
        lvMain.setOnItemLongClickListener(this);
        // Прослушиваем нажатия клавиш

        button.setOnClickListener(this);


    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.button :

                catnames.add(0, myText.getText().toString());
                adapter.notifyDataSetChanged();
                myText.setText("");
                myText.setBackgroundColor(Color.TRANSPARENT);
                myText.setPaintFlags(0);

        break;

            }

    }



    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        Log.d(LOG_TAG, "itemClick: position = " + i + ", id = "
                + l);
        TextView textview= (TextView) view;
        if (textview.getPaintFlags() != 16){
            textview.setPaintFlags(16);
            textview.setBackgroundColor(Color.parseColor("#77dd77"));
            Toast.makeText(this, "Куплено", Toast.LENGTH_SHORT).show();
         } else {
            textview.setPaintFlags(0);
            textview.setBackgroundColor(Color.TRANSPARENT);
                }
    }

    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        catnames.remove(position);
        adapter.notifyDataSetChanged();
        Toast.makeText(this, "Удалено", Toast.LENGTH_SHORT).show();
        Log.d(LOG_TAG, "onItemClick: position = " + position + ", id = "
                + id);
        return true;
    }
}

enter image description here

1 个答案:

答案 0 :(得分:1)

每个listview项都有自己的R.id.editText,因此只有一个全局myText = (EditText) findViewById(R.id.editText);不起作用。

相反,你必须在onClick处理程序

中找到编辑
    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.button : {
                // EditText myText = (EditText) view.findViewById(R.id.editText);
                TextView myText = (TextView) view;
                catnames.add(0, myText.getText().toString());
                adapter.notifyDataSetChanged();
                myText.setText("");
                myText.setBackgroundColor(Color.TRANSPARENT);
                myText.setPaintFlags(0);
            }
        break;

            }

    }

[更新于28.7.2015] 您的适配器正在使用android.R.layout.simple_list_item_1

   adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, catnames);

没有带有ID为R.id.editText的EditText。因此你得到一个例外。

simple_list_item_1是一个textview。使用

  TextView myText = (TextView) view;

可能有效