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. 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);
}
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);
}
}
You can use array of views to identify them easily.
View[] viewlist=new View[AccNoList.size];
for (int i=0; i<AccNoList.size; i++) {
LayoutInflater inflater = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
viewlist[i]= inflater.inflate(R.layout.my_table_row, myTable, true);
inflater.setId(position);
...
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(position);
((TextView)viewlist[i].findViewById(that_id)).setText("Your Text");
}
});
...
}