Java 如何在ListView中设置计数器应用程序
首先,我创建了一个计数器应用程序,它有两个按钮和一个EditText,其中一个按钮具有增加计数的功能,而另一个按钮具有减少计数的功能,这些结果显示在EditText中。 现在我想把这个计数器应用程序放在ListView中。ListView中至少需要放置10个计数器应用程序。我尝试了一些代码,下面会附上一些图片 我的代码附在下面 反作用Java 如何在ListView中设置计数器应用程序,java,android,listview,android-listview,baseadapter,Java,Android,Listview,Android Listview,Baseadapter,首先,我创建了一个计数器应用程序,它有两个按钮和一个EditText,其中一个按钮具有增加计数的功能,而另一个按钮具有减少计数的功能,这些结果显示在EditText中。 现在我想把这个计数器应用程序放在ListView中。ListView中至少需要放置10个计数器应用程序。我尝试了一些代码,下面会附上一些图片 我的代码附在下面 反作用 public class CounterActivity extends AppCompatActivity { private ListView lstC
public class CounterActivity extends AppCompatActivity {
private ListView lstCount;
private CustomAdapter adapter;
private ArrayList<CountModel> mCount = new ArrayList<CountModel>();
final Context context = this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_counter);
lstCount = (ListView)findViewById(R.id.lst_counter);
adapter = new CustomAdapter(this,mCount);
lstCount.setAdapter(adapter);
}}
自定义适配器
public class CustomAdapter extends BaseAdapter {
int counter = 0;
int maxcounter=20;
private ArrayList<CountModel>mCount = new ArrayList<CountModel>();
Context context;
public CustomAdapter(Context context, ArrayList<CountModel> count) {
this.context = context;
this.mCount=count;
}
@Override
public int getCount() {
return mCount.size();
}
@Override
public Object getItem(int position) {
return mCount.get(position);
}
@Override
public long getItemId(int position) {
return mCount.indexOf(getItemId(position));
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyViewHolder myViewHolder = null;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = inflater.inflate(R.layout.activity_counter, null);
myViewHolder = new MyViewHolder();
myViewHolder.btnDec = (Button) convertView.findViewById(R.id.btn_dec);
myViewHolder.btnInc = (Button) convertView.findViewById(R.id.btn_inc);
myViewHolder.edtCount = (EditText) convertView.findViewById(R.id.edt_count);
convertView.setTag(myViewHolder);
} else {
myViewHolder = (MyViewHolder) convertView.getTag();
}
final String mEdtCount = myViewHolder.edtCount.toString();
myViewHolder.edtCount.setOnEditorActionListener(mCount.get(position).getEdtCount());
myViewHolder.btnDec.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (counter >0 && counter <=20) {
counter--;
mEdtCount.setText(Integer.toString(counter));
}else
if (counter<0){
mEdtCount.setText(Integer.toString(counter));
}
}
}.mCount.get(position).getBtnDec());
myViewHolder.btnInc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
counter++;
if (counter >0 && counter <=20) {
mEdtCount.setText(Integer.toString(counter));
}else if(counter >20){
counter--;
mEdtCount.setText(Integer.toString(maxcounter));
}
}
}.mCount.get(position).getBtnInc());
return convertView;
}
private class MyViewHolder {
Button btnInc;
Button btnDec;
EditText edtCount;
}}
尝试更改此选项:
final String mEdtCount = myViewHolder.edtCount.toString();
为此:
final EditText mEdtCount = myViewHolder.edtCount;
将此编码部分替换为您的代码
final String mEdtCount = myViewHolder.edtCount.getText().toString();
myViewHolder.edtCount.setOnEditorActionListener(mCount.get(position).getEdtCount());
myViewHolder.btnDec.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (counter >0 && counter <=20) {
counter--;
myViewHolder.edtCount.setText(Integer.toString(counter));
}else
if (counter<0){
myViewHolder.edtCount.setText(Integer.toString(counter));
}
}
}.mCount.get(position).getBtnDec());
myViewHolder.btnInc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
counter++;
if (counter >0 && counter <=20) {
myViewHolder.edtCount.setText(Integer.toString(counter));
}else if(counter >20){
counter--;
myViewHolder.edtCount.setText(Integer.toString(maxcounter));
}
}
}.mCount.get(position).getBtnInc());
final String mEdtCount=myViewHolder.edtCount.getText().toString();
myViewHolder.edtCount.setOnEditorActionListener(mCount.get(position.getEdtCount());
myViewHolder.btnDec.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(counter>0&&counter)您做了错误的事情,没有正确获取edittext,而是使用了字符串,这就是发生错误的原因。仍然面临这些错误error:(61,89)错误:不兼容的类型:edittext无法转换为OnEditorActionListener错误:(74,10)错误:找不到符号变量mCount错误:(87,10)错误:找不到符号变量mCount注意:某些消息已被简化;使用-Xdiags:verbose重新编译以获取完整输出错误:任务执行失败“:app:compiledBugJavaWithJavaC.”>编译失败;有关详细信息,请参阅编译器错误输出。
为什么使用setOnEditorActionListener?它的用途是什么?显示单击“增加”和“减少”按钮时计数器的结果用于文本视图的编辑或操作侦听器,因此最好在查看代码时使用显示文本视图,因为所有其他操作都可以解决问题
final EditText mEdtCount = myViewHolder.edtCount;
final String mEdtCount = myViewHolder.edtCount.getText().toString();
myViewHolder.edtCount.setOnEditorActionListener(mCount.get(position).getEdtCount());
myViewHolder.btnDec.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (counter >0 && counter <=20) {
counter--;
myViewHolder.edtCount.setText(Integer.toString(counter));
}else
if (counter<0){
myViewHolder.edtCount.setText(Integer.toString(counter));
}
}
}.mCount.get(position).getBtnDec());
myViewHolder.btnInc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
counter++;
if (counter >0 && counter <=20) {
myViewHolder.edtCount.setText(Integer.toString(counter));
}else if(counter >20){
counter--;
myViewHolder.edtCount.setText(Integer.toString(maxcounter));
}
}
}.mCount.get(position).getBtnInc());