如何显示两个文本视图记录与第一个自定义列表视图的编辑文本记录到第二个自定义列表视图上编辑文本afterTextChanged

时间:2014-09-23 12:34:36

标签: android android-listview textwatcher

我创建了两个自定义列表视图,第一个自定义列表视图有两个文本视图和一个编辑文本,而在第二个自定义列表视图中有三个文本视图,我想要做的是当用户首先输入值时编辑文本时,带有两个文本视图记录的编辑文本的值应显示在第一行的第二个自定义列表视图中,当用户在第二个编辑文本中输入值时,该编辑文本的值将带有两个文本视图记录应显示在第二行中第二个列表视图,在我的代码中,当我在编辑文本中输入值时,该编辑文本的值和两个文本视图记录显示第二个列表视图但是,当我在第一个自定义列表视图的第二个编辑文本中输入值时值也显示在第二个自定义列表视图中,但它显示在第一行,我想在第二个自定义列表视图的第二行显示该记录。

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;
    }

1 个答案:

答案 0 :(得分:0)

很难理解你正在尝试做什么,但有一点很清楚:你似乎并不了解listviews的工作原理。您无法直接更改列表视图的显示元素 - 您必须更改适配器后面的数据,然后调用notifyDataSetChanged

您需要拥有一些数据结构来保存每个列表视图的数据。在第一个ListView的适配器内,您需要引用第二个ListView的适配器的数据结构。然后,在文本观察器内部,当您需要在第二个列表视图中更新某些内容时,您需要修改该数据结构内的第二个列表视图中的数据,并在其上调用notifyDataSetChanged以反映更改屏幕。

显然,您需要修改第二个适配器(特别是getView方法),以根据数据结构的内容和行的索引创建视图。