我创建了两个自定义列表视图,第一个自定义列表视图有两个文本视图和一个编辑文本,而在第二个自定义列表视图中有三个文本视图,我想要做的是当用户首先输入值时编辑文本时,带有两个文本视图记录的编辑文本的值应显示在第一行的第二个自定义列表视图中,当用户在第二个编辑文本中输入值时,该编辑文本的值将带有两个文本视图记录应显示在第二行中第二个列表视图,在我的代码中,当我在编辑文本中输入值时,该编辑文本的值和两个文本视图记录显示第二个列表视图但是,当我在第一个自定义列表视图的第二个编辑文本中输入值时值也显示在第二个自定义列表视图中,但它显示在第一行,我想在第二个自定义列表视图的第二行显示该记录。
public class MainActivity extends Activity {
ArrayList<Candy> myArrList;
EditText text;
List<String> a = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myArrList = new ArrayList<Candy>();
ListView lisView1 = (ListView)findViewById(R.id.listView1);
ListView lisView2 = (ListView)findViewById(R.id.listView2);
myArrList.add(new Candy("Butterscotch", "10"));
myArrList.add(new Candy("Birthday Cake", "100"));
myArrList.add(new Candy("Black Crunch", "102"));
myArrList.add(new Candy("Industrial Chocolate", "200"));
myArrList.add(new Candy("Coffee Molasses Chip", "500"));
lisView1.setAdapter(new CountryAdapter(this));
lisView2.setAdapter(new CountryAdapter2(getApplicationContext()));
}
//This is base adapter for first list view
public class CountryAdapter extends BaseAdapter
{
private Context context;
public CountryAdapter(Context c)
{
context = c;
}
public int getCount() {
// TODO Auto-generated method stub
return myArrList.size();
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = inflater.inflate(R.layout.activity_mmnue, null);
}
// ColID
TextView txtID = (TextView) convertView.findViewById(R.id.nm);
txtID.setText(myArrList.get(position).getName() +".");
// ColCode
TextView txtCode = (TextView) convertView.findViewById(R.id.rat);
txtCode.setText(myArrList.get(position).getRate());
text = (EditText)convertView.findViewById(R.id.txtInput);
text.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s)
{
TextView txtCode = (TextView)findViewById(R.id.secnm);
TextView txtID = (TextView)findViewById(R.id.secrat);
TextView tv = (TextView)findViewById(R.id.sectxtInput);
txtCode.setText(myArrList.get(position).getName() +".");
tv.setText(s);
txtID.setText(myArrList.get(position).getRate());
Toast.makeText(getApplicationContext(), "hello"+s+""+myArrList.get(position).getName()+""+myArrList.get(position).getRate(), 50).show(); }
});
return convertView;}}
//This is second adapter for second list view
public class CountryAdapter2 extends BaseAdapter
{
private Context context;
public CountryAdapter2(Context c)
{
context = c;
}
public int getCount() {
//TODO Auto-generated method stub
return myArrList.size();
}
public Object getItem(int position) {
//TODO Auto-generated method stub
return position;
}
public long getItemId(int position) {
//TODO Auto-generated method stub
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
{convertView = inflater.inflate(R.layout.secmmnue, null);
}
return convertView;
}
答案 0 :(得分:0)
很难理解你正在尝试做什么,但有一点很清楚:你似乎并不了解listviews的工作原理。您无法直接更改列表视图的显示元素 - 您必须更改适配器后面的数据,然后调用notifyDataSetChanged
。
您需要拥有一些数据结构来保存每个列表视图的数据。在第一个ListView的适配器内,您需要引用第二个ListView的适配器的数据结构。然后,在文本观察器内部,当您需要在第二个列表视图中更新某些内容时,您需要修改该数据结构内的第二个列表视图中的数据,并在其上调用notifyDataSetChanged
以反映更改屏幕。
显然,您需要修改第二个适配器(特别是getView
方法),以根据数据结构的内容和行的索引创建视图。