Complex list containing buttons getting corrupted

Put problem concerning Views, Layouts and other XML-Resources (like AndroidManifest) here.

Complex list containing buttons getting corrupted

Postby kamalpreet.singh » Sat Feb 06, 2010 8:08 am

Hi friends,
I have created a list that has an image, two TextView(s) and one button. My intention is to detect every single button in the row and change its text when it is clicked. below is my sample code,

Problem: In the over ridden getview function of the arrayAdapter class, I am assinging onclicklistener to every individual button, when I run the program and click on the button, results are as expected, but when I scroll the list, the buttons change there text to original text and the buttons which were not clicked change there text to something else.

list item - user_list_item.xml
Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
  1.  
  2. <?xml version="1.0" encoding="utf-8"?>
  3.  
  4. <LinearLayout  
  5.  
  6.                         xmlns:android="http://schemas.android.com/apk/res/android"
  7.  
  8.                         android:layout_width="fill_parent"
  9.  
  10.                         android:layout_height="wrap_content"
  11.  
  12.                         android:background="@android:drawable/bottom_bar">
  13.  
  14.         <ImageView android:id="@+id/ImageView01"
  15.  
  16.                         android:src="@drawable/icon"
  17.  
  18.                         android:layout_height="fill_parent"
  19.  
  20.                         android:layout_width="wrap_content"
  21.  
  22.                         android:scaleType="centerInside"
  23.  
  24.                         android:minHeight="100dp"
  25.  
  26.                         android:minWidth="100dp"
  27.  
  28.                         android:maxHeight="100dp"
  29.  
  30.                         android:maxWidth="100dp">
  31.  
  32.         </ImageView>
  33.  
  34.         <RelativeLayout android:id="@+id/user_detail"
  35.  
  36.                                 android:layout_height="wrap_content"
  37.  
  38.                                 android:orientation="vertical" android:layout_width="wrap_content">
  39.  
  40.                                
  41.  
  42.                 <RelativeLayout android:id="@+id/user_name_status"
  43.  
  44.                                         android:layout_height="wrap_content"
  45.  
  46.                                         android:orientation="vertical"
  47.  
  48.                                         android:layout_width="fill_parent">
  49.  
  50.                         <TextView android:id="@+id/user_name"
  51.  
  52.                                         android:layout_height="wrap_content"
  53.  
  54.                                         android:textSize="20px"
  55.  
  56.                                         android:text="@string/user_status"
  57.  
  58.                                         android:layout_width="fill_parent">
  59.  
  60.                         </TextView>
  61.  
  62.                         <TextView android:text="@string/user_status"
  63.  
  64.                                         android:id="@+id/user_status"
  65.  
  66.                                         android:layout_width="fill_parent"
  67.  
  68.                                         android:layout_height="wrap_content"
  69.  
  70.                                         android:layout_below="@id/user_name"
  71.  
  72.                                         android:ellipsize="end">
  73.  
  74.                         </TextView>
  75.  
  76.                 </RelativeLayout>
  77.  
  78.                
  79.  
  80.                 <RelativeLayout android:id="@+id/user_click"
  81.  
  82.                                         android:layout_height="wrap_content"
  83.  
  84.                                         android:orientation="horizontal"
  85.  
  86.                                         android:layout_width="fill_parent"
  87.  
  88.                                         android:layout_below="@id/user_name_status">
  89.  
  90.                         <Button android:id="@+id/list_button"
  91.  
  92.                                 android:text="butt"
  93.  
  94.                                 android:layout_alignParentRight="true"
  95.  
  96.                                 android:layout_width="wrap_content"
  97.  
  98.                                 android:layout_height="wrap_content"/>
  99.  
  100.                 </RelativeLayout>
  101.  
  102.         </RelativeLayout>
  103.  
  104. </LinearLayout>
  105.  
  106.  
  107.  
  108.  
Parsed in 0.007 seconds, using GeSHi 1.0.8.4



main layout for list activity - main.xml
Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
  1.  
  2. <?xml version="1.0" encoding="utf-8"?>
  3.  
  4. <ListView       android:id="@android:id/list"
  5.  
  6.                         android:layout_width="fill_parent"
  7.  
  8.                         android:layout_height="fill_parent"
  9.  
  10.                         xmlns:android="http://schemas.android.com/apk/res/android">
  11.  
  12. </ListView>
  13.  
  14.  
Parsed in 0.001 seconds, using GeSHi 1.0.8.4


Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2.  
  3.  
  4. import java.util.ArrayList;
  5.  
  6.  
  7.  
  8. import android.app.ListActivity;
  9.  
  10. import android.content.Context;
  11.  
  12. import android.os.Bundle;
  13.  
  14. import android.view.LayoutInflater;
  15.  
  16. import android.view.View;
  17.  
  18. import android.view.ViewGroup;
  19.  
  20. import android.widget.ArrayAdapter;
  21.  
  22. import android.widget.Button;
  23.  
  24. import android.widget.TextView;
  25.  
  26.  
  27.  
  28. public class LineUserList extends ListActivity {
  29.  
  30.  
  31.  
  32.         ArrayList<User> mUsers;
  33.  
  34.         UserAdapter mAdapter;
  35.  
  36.        
  37.  
  38.     /** Called when the activity is first created. */
  39.  
  40.     @Override
  41.  
  42.     public void onCreate(Bundle savedInstanceState) {
  43.  
  44.         super.onCreate(savedInstanceState);
  45.  
  46.         setContentView(R.layout.main);
  47.  
  48.        
  49.  
  50.         mUsers = new ArrayList<User>();
  51.  
  52.                
  53.  
  54.         for(int i = 1; i <= 50; i++){
  55.  
  56.                 User user = new User("user" + i, "no status available yet");
  57.  
  58.                 mUsers.add(user);
  59.  
  60.         }
  61.  
  62.                
  63.  
  64.         mAdapter = new UserAdapter(this, R.layout.user_list_item, mUsers);
  65.  
  66.         setListAdapter(mAdapter);
  67.  
  68.     }
  69.  
  70.    
  71.  
  72.     class User {
  73.  
  74.         private String mName;
  75.  
  76.         private String mStatus;
  77.  
  78.        
  79.  
  80.         public User(String name, String status) {
  81.  
  82.                 mName = name;
  83.  
  84.                 mStatus = status;
  85.  
  86.         }
  87.  
  88.        
  89.  
  90.         public String getName() {
  91.  
  92.                 return mName;
  93.  
  94.         }
  95.  
  96.        
  97.  
  98.         public String getStatus() {
  99.  
  100.                 return mStatus;
  101.  
  102.         }
  103.  
  104.     }// user
  105.  
  106.    
  107.  
  108.     private class UserAdapter extends ArrayAdapter<User> {
  109.  
  110.                
  111.  
  112.                 public UserAdapter(Context context, int textViewResourceId,
  113.  
  114.                                 ArrayList<User> objects) {
  115.  
  116.                         super(context, textViewResourceId, objects);
  117.  
  118.                 }
  119.  
  120.                
  121.  
  122.                 @Override
  123.  
  124.                 public View getView(final int position, View convertView, ViewGroup parent) {
  125.  
  126.                        
  127.  
  128.                         View workView = convertView;
  129.  
  130.                                                
  131.  
  132.                         if(workView == null) {
  133.  
  134.                         LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  135.  
  136.                         workView = vi.inflate(R.layout.online_user_list_item, null);
  137.  
  138.                         }
  139.  
  140.                        
  141.  
  142.                         final User user = getItem(position);
  143.  
  144.                                                
  145.  
  146.                         if(user != null) {
  147.  
  148.                                 TextView name = (TextView)workView.findViewById(R.id.user_name);
  149.  
  150.                                 if(name != null) {
  151.  
  152.                                         name.setText(user.getName());
  153.  
  154.                                 }
  155.  
  156.                                
  157.  
  158.                                 TextView status = (TextView)workView.findViewById(R.id.user_status);
  159.  
  160.                                 if(status != null) {
  161.  
  162.                                         status.setText(user.getStatus());
  163.  
  164.                                 }
  165.  
  166.                         }
  167.  
  168.                        
  169.  
  170.                         final Button button = (Button)workView.findViewById(R.id.list_button);
  171.  
  172.                         button.setOnClickListener( new View.OnClickListener() {
  173.  
  174.                                 @Override
  175.  
  176.                                 public void onClick(View v) {
  177.  
  178.                                         button.setText(String.valueOf(position));
  179.  
  180.                                 }
  181.  
  182.                         });
  183.  
  184.                         return workView;
  185.  
  186.                 }// getView
  187.  
  188.     }// UserAdapter
  189.  
  190. }// OnLineUserList
  191.  
  192.  
Parsed in 0.041 seconds, using GeSHi 1.0.8.4
regards-
Kamalpreet
kamalpreet.singh
Junior Developer
Junior Developer
 
Posts: 11
Joined: Sun Jan 24, 2010 6:14 pm

Top

Postby kamalpreet.singh » Sat Feb 06, 2010 8:19 am

one comment I want to make on above code is:

whenever list scrolls, getview function is creating a new button from the resource, that's why button(s) who's text was changed by clicking on it is getting reset.

But I am not able to understand, why buttons on which click was never done are changing there text. Another thing is, even some of the original buttons on which click was made are getting different values.

Hope somebody can answer this....
regards-
Kamalpreet
kamalpreet.singh
Junior Developer
Junior Developer
 
Posts: 11
Joined: Sun Jan 24, 2010 6:14 pm

Top

Return to View, Layout & Resource Problems

Who is online

Users browsing this forum: Exabot [Bot] and 7 guests