Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
164 views
in Technique[技术] by (71.8m points)

listview - Android Adding view from inflate layout and how to update particular textview value in layout

I have created view from inflating separate layout. I used for loop to create view more than 5 view like an ListView. Here I want call balance check. Inside view, I will click balance button and once receive response from server, I want to update particular TextView in an existing created view. Any help? I am expecting same for phonepe app balance checking page. enter image description here while scrolling also, it should not hide the updated balance. My Ref stack link: Updating a textview in different layout xml from the main activity

Create a custom View by inflating a layout? My Sample Code:

for (int i=0; i<AccNoList.size; i++) {
    LayoutInflater inflater = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v =  inflater.inflate(R.layout.my_table_row, myTable, true);
    inflater.setId(i);
    ImageButton balancebtn = (ImageButton) v.findViewById(R.id.balancebtn);
    TextView    textview_accnumber   = (TextView)    v.findViewById(R.id.textview_accnumber);
    textview_accnumber.setText("Text for this row");
    balancebtn.setId(i); // So that when it is clicked we know which one has been clicked!
    balancebtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    // once received value from server, i want to update the same row textview balance.
    checkBalance(i);
    }
    });          
    textview_accnumber.setId(i);
    tr.setId(i);
    textview_accnumber.setText(AccNoList.get(i));

    linearlayout.addView(inflater);
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

To update a view property you have to store that view reference. In your case store the views you have created from inflating separate layout.

View view1 = LayoutInflater.from(context).inflate(layoutId, parent, false);
View view2 = LayoutInflater.from(context).inflate(layoutId, parent, false);
View view3 = LayoutInflater.from(context).inflate(layoutId, parent, false);

Then when you receive response from server, get reference the child view you want to update by findViewById() method and update child's property.

Example:

TextView textView1 = view1.findViewById(viewId);
textView1.setText("Updated Text");

TextView textView2 = view2.findViewById(viewId);
textView2.setText("Updated Text");

Edit

// declare it as global
View views[] = new View[size]

for (int i=0; i<AccNoList.size; i++) {
  LayoutInflater inflater = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  views[i] =  inflater.inflate(R.layout.my_table_row, myTable, true);
   //inflater.setId(i);
  ImageButton balancebtn = (ImageButton) views[i].findViewById(R.id.balancebtn);
  TextView    textview_accnumber   = (TextView)    views[i].findViewById(R.id.textview_accnumber);
  textview_accnumber.setText("Text for this row");
   // balancebtn.setId(i); // So that when it is clicked we know which one has been clicked!
  balancebtn.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View view) {
     // once received value from server, i want to update the same row textview balance.
       checkBalance(i);
    }
  });          
  //textview_accnumber.setId(i);
  //tr.setId(i);
  textview_accnumber.setText(AccNoList.get(i));

  linearlayout.addView(inflater);
}

checkBalance method

public void checkBalance(final int position){
  // .................
  // ..............
 // after received response
    updateStatus(position);
}

updateStatus method

private void updateStatus(int position, String text){
  if(position < views.length){
     TextView textview_accnumber = (TextView)views[i].findViewById(R.id.textview_accnumber);
     if(textview_accnumber != null)
       textview_accnumber.setText(text);
  }
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...