Я новичок в Android, и я прочитал несколько учебных пособий о Custom ListView, и я делаю приложение, чтобы манипулировать данными, я возобновил свою проблему с этим маленьким приложением. the screen is this:
in this there are a listview and each item have a TextView and a EditText the one last control is for the user input a amount I need when the user press the button clear first save de amount info in the ArrayList, а затем очистите поля. Как я подхожу к этому
my code:
< /code>
listview_item.xml
< /code>
mainactivity.java
package com.rimacy.preguntalistview;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList data = new ArrayList();
data.add(new Inventory("candies",0));
data.add(new Inventory("milk",0));
data.add(new Inventory("soda",0));
data.add(new Inventory("paper",0));
data.add(new Inventory("bags",0));
//... the items are unknow in run time
MyAdapter adp = new MyAdapter(this,R.layout.listview_item,data);
ListView listView = (ListView)findViewById(R.id.listView1);
listView.setAdapter(adp);
Button btnClear = (Button) findViewById(R.id.btnClear);
btnClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// set de value of each EditText to "amount" field in each object in the ArrayList "data"
// perform a clear of all EditText in the listview
// set the focus in the firs EditText
}
});
}
class Inventory{
String name;
Integer amount;
public Inventory(String name, Integer amount) {
this.name = name;
this.amount = amount;
}
public String getName() {
return name;
}
}
class MyAdapter extends ArrayAdapter{
private ArrayList items;
public MyAdapter(Context context, int resource, ArrayList items) {
super(context, resource, items);
this.items = items;
}
public View getView(int position, final View convertView, ViewGroup parent) {
View v=convertView;
TextView editText;
if (v == null){
LayoutInflater inflater = LayoutInflater.from(getContext());
v = inflater.inflate(R.layout.listview_item, null);
}
editText = (TextView)v.findViewById(R.id.tv1);
editText.setText(items.get(position).getName());
return v;
}
}
}
< /code>
update < /strong>
Я сделал это < /p>
** < /p>
package com.rimacy.preguntalistview;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class MainActivity extends AppCompatActivity {
ArrayList data = new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
data.add(new Inventory("candies",0));
data.add(new Inventory("milk",0));
data.add(new Inventory("soda",0));
data.add(new Inventory("paper",0));
data.add(new Inventory("bags",0));
//... the items are unknow in run time
final MyAdapter adp = new MyAdapter(this,R.layout.listview_item,data);
final ListView listView = (ListView)findViewById(R.id.listView1);
listView.setAdapter(adp);
adp.notifyDataSetChanged();
Button btnClear = (Button) findViewById(R.id.btnClear);
if (btnClear!= null){
btnClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// set de value of each EditText to "amount" field in each object in the ArrayList "data"
// perform a clear of all EditText in the listview
// set the focus in the firs EditText
for (Inventory i:data){
i.getTxt().setText("");
}
adp.notifyDataSetChanged();
}
});
}
}
class Inventory{
String name;
Integer amount;
EditText txt;
public void setName(String name) {
this.name = name;
}
public EditText getTxt() {
return txt;
}
public void setTxt(EditText txt) {
this.txt = txt;
}
public Inventory(String name, Integer amount) {
this.name = name;
this.amount = amount;
}
public String getName() {
return name;
}
}
class MyAdapter extends ArrayAdapter{
private ArrayList items;
public MyAdapter(Context context, int resource, ArrayList items1) {
super(context, resource, items1);
items = items1;
}
public View getView(int position, final View convertView, ViewGroup parent) {
View v=convertView;
TextView editText;
EditText txt;
if (v == null){
LayoutInflater inflater = LayoutInflater.from(getContext());
v = inflater.inflate(R.layout.listview_item, null);
}
txt = (EditText)v.findViewById(R.id.edit1);
editText = (TextView)v.findViewById(R.id.tv1);
items.get(position).setTxt(txt);
editText.setText(items.get(position).getName());
return v;
}
}
}
Добавил нового участника в классе инвентаризации, чтобы сохранить ссылку на EditText, который назначается в событии GetView, и с помощью methos getTxt напомнить эту ссылку и вызовать метод SetText с пустой строкой, но он работает только тогда, когда я нажимаю кнопку дважды, почему?>
Я новичок в Android, и я прочитал несколько учебных пособий о Custom ListView, и я делаю приложение, чтобы манипулировать данными, я возобновил свою проблему с этим маленьким приложением. the screen is this: [img]https://i.sstatic.net/LL1ZP.jpg[/img]
in this there are a listview and each item have a TextView and a EditText the one last control is for the user input a amount I need when the user press the button clear first save de amount info in the ArrayList, а затем очистите поля. Как я подхожу к этому my code:
public class MainActivity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayList data = new ArrayList(); data.add(new Inventory("candies",0)); data.add(new Inventory("milk",0)); data.add(new Inventory("soda",0)); data.add(new Inventory("paper",0)); data.add(new Inventory("bags",0)); //... the items are unknow in run time
MyAdapter adp = new MyAdapter(this,R.layout.listview_item,data); ListView listView = (ListView)findViewById(R.id.listView1); listView.setAdapter(adp);
Button btnClear = (Button) findViewById(R.id.btnClear); btnClear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // set de value of each EditText to "amount" field in each object in the ArrayList "data" // perform a clear of all EditText in the listview // set the focus in the firs EditText } });
public String getName() { return name; } } class MyAdapter extends ArrayAdapter{ private ArrayList items; public MyAdapter(Context context, int resource, ArrayList items) { super(context, resource, items); this.items = items; } public View getView(int position, final View convertView, ViewGroup parent) { View v=convertView; TextView editText; if (v == null){ LayoutInflater inflater = LayoutInflater.from(getContext()); v = inflater.inflate(R.layout.listview_item, null); } editText = (TextView)v.findViewById(R.id.tv1); editText.setText(items.get(position).getName()); return v; } } } < /code> update < /strong>
Я сделал это < /p> ** < /p> package com.rimacy.preguntalistview; import android.content.Context; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class MainActivity extends AppCompatActivity { ArrayList data = new ArrayList(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); data.add(new Inventory("candies",0)); data.add(new Inventory("milk",0)); data.add(new Inventory("soda",0)); data.add(new Inventory("paper",0)); data.add(new Inventory("bags",0)); //... the items are unknow in run time final MyAdapter adp = new MyAdapter(this,R.layout.listview_item,data); final ListView listView = (ListView)findViewById(R.id.listView1); listView.setAdapter(adp); adp.notifyDataSetChanged(); Button btnClear = (Button) findViewById(R.id.btnClear); if (btnClear!= null){ btnClear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // set de value of each EditText to "amount" field in each object in the ArrayList "data" // perform a clear of all EditText in the listview // set the focus in the firs EditText for (Inventory i:data){ i.getTxt().setText(""); } adp.notifyDataSetChanged(); } }); } } class Inventory{ String name; Integer amount; EditText txt; public void setName(String name) { this.name = name; } public EditText getTxt() { return txt; } public void setTxt(EditText txt) { this.txt = txt; } public Inventory(String name, Integer amount) { this.name = name; this.amount = amount; } public String getName() { return name; } } class MyAdapter extends ArrayAdapter{ private ArrayList items; public MyAdapter(Context context, int resource, ArrayList items1) { super(context, resource, items1); items = items1; } public View getView(int position, final View convertView, ViewGroup parent) { View v=convertView; TextView editText; EditText txt; if (v == null){ LayoutInflater inflater = LayoutInflater.from(getContext()); v = inflater.inflate(R.layout.listview_item, null); } txt = (EditText)v.findViewById(R.id.edit1); editText = (TextView)v.findViewById(R.id.tv1); items.get(position).setTxt(txt); editText.setText(items.get(position).getName()); return v; } } } [/code] Добавил нового участника в классе инвентаризации, чтобы сохранить ссылку на EditText, который назначается в событии GetView, и с помощью methos getTxt напомнить эту ссылку и вызовать метод SetText с пустой строкой, но он работает только тогда, когда я нажимаю кнопку дважды, почему?>