Making dynamic layout for each row in ListView in android

后端 未结 2 1991
夕颜
夕颜 2021-01-25 07:52

I have a xml file which contains basic layout for each row of ListView(which is a realtive layout and has TextView inside it).

I want to change the attributes of this la

2条回答
  •  南方客
    南方客 (楼主)
    2021-01-25 08:30

    You can implement a ViewHolder pattern for your adapter, and for each position, inflate your own layout.

    To do that, override getView like this:

    public View getView(int position, View convertView, ViewGroup parent) {            
    
       // A ViewHolder keeps references to children views to avoid unneccessary calls            
      // to findViewById() on each row.            
      ViewHolder holder;            
      // When convertView is not null, we can reuse it directly, there is no need            
      // to reinflate it. We only inflate a new View when the convertView supplied            
      // by ListView is null.            
    
      if (convertView == null) {                
    
        convertView = mInflater.inflate(R.layout.sample, null);   
        // Creates a ViewHolder and store references to the two children views                
        // we want to bind data to.               
       holder = new ViewHolder();                
       holder.name = (TextView) convertView.findViewById(R.id.text);               
       holder.icon = (ImageView) convertView.findViewById(R.id.icon);                
       convertView.setTag(holder);            
     } else {                
       // Get the ViewHolder back to get fast access to the TextView                
       // and the ImageView.
       holder = (ViewHolder) convertView.getTag();
     }             
    
    
      // Bind the data efficiently with the holder. 
      holder.name.setText(myElements.get(id)); 
      holder.icon.setImageBitmap( mIcon1 );
    
    return convertView;
    }  
    

    Read more about this on the Android developer site here

    EDIT:

    To change the width and height of each row, you can use something like the following, for each row on bind data section :

    RelativeLayout rl = (RelativeLayout) findViewById(R.id.yourId); 
    rl.getLayoutParams().height = 100;
    rl.getLayoutParams().width = 100;`
    

提交回复
热议问题