我是一名新的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;
}
}
答案 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;
可能有效