2013-04-09 23 views
6

Android'de datagrid denetimi gibi bir liste görünümü yapmak istiyorum.Tüm sütunlar dinamik olan kod-behand tarafından üretilir.Mod snippet'leri başarılı bir şekilde oluşturulabilir ancak liste görünümü beklediğim gibi görüntülenmiyor.Ne yanlış?Çalışma zamanında liste görünümüne bir sütun ekleyebilir miyim?

@Override 
     public View getView(int position, View convertView, ViewGroup parentView) { 
      ViewHolder holder = null; 
      if (convertView == null) { 
       synchronized (MainActivity.this) { 
        convertView = mInflater.inflate(id_row_layout, null); 
        holder = new ViewHolder(); 

//I had add an textView to the convertView,but it not show 

        LinearLayout layout = (LinearLayout) convertView.findViewById(R.id.rLayout); 
        TextView tx = new TextView(context); 
        tx.setText("ads"); 
        layout.addView(tx); 

        MyHScrollView scrollView1 = (MyHScrollView) convertView 
          .findViewById(R.id.horizontalScrollView1); 

        holder.scrollView = scrollView1; 
        holder.txt1 = (TextView) convertView 
          .findViewById(R.id.textView1); 
        holder.txt2 = (TextView) convertView 
          .findViewById(R.id.textView2); 
        holder.txt3 = (TextView) convertView 
          .findViewById(R.id.textView3); 
        holder.txt4 = (TextView) convertView 
          .findViewById(R.id.textView4); 
        holder.txt5 = (TextView) convertView 
          .findViewById(R.id.textView5); 

        MyHScrollView headSrcrollView = (MyHScrollView) mHead 
          .findViewById(R.id.horizontalScrollView1); 
        headSrcrollView 
          .AddOnScrollChangedListener(new OnScrollChangedListenerImp(
            scrollView1)); 

        convertView.setTag(holder); 
        mHolderList.add(holder); 
       } 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 
      holder.txt1.setText(position + "" + 1); 
      holder.txt2.setText(position + "" + 2); 
      holder.txt3.setText(position + "" + 3); 
      holder.txt4.setText(position + "" + 4); 
      holder.txt5.setText(position + "" + 5); 

      return convertView; 
     } 
+0

, bu Yanıtınız için – Senthil

+0

teşekkürler mümkün değildir, ben bir datagrid.i olarak göstermek için veri yüklemek istediğiniz tablelayout çözüm denemek vardı, ama yavaş çalışır.listview kullanmak zorundayım ama benim sqlite tablo nesnesine nesneyi nesnesine göre başka bir çözüm? – Whistler

cevap

0

Ekstra metin içeren ApiDemos'ta benim için çalışır;

public class List14 extends ListActivity { 

    private static class EfficientAdapter extends BaseAdapter { 
     private LayoutInflater mInflater; 
     private Bitmap mIcon1; 
     private Bitmap mIcon2; 
     private Context context; 

     public EfficientAdapter(Context context) { 
      // Cache the LayoutInflate to avoid asking for a new one each time. 
      mInflater = LayoutInflater.from(context); 
this.context = context; 
      // Icons bound to the rows. 
      mIcon1 = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon48x48_1); 
      mIcon2 = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon48x48_2); 
     } 

     /** 
     * The number of items in the list is determined by the number of speeches 
     * in our array. 
     * 
     * @see android.widget.ListAdapter#getCount() 
     */ 
     public int getCount() { 
      return DATA.length; 
     } 

     /** 
     * Since the data comes from an array, just returning the index is 
     * sufficent to get at the data. If we were using a more complex data 
     * structure, we would return whatever object represents one row in the 
     * list. 
     * 
     * @see android.widget.ListAdapter#getItem(int) 
     */ 
     public Object getItem(int position) { 
      return position; 
     } 

     /** 
     * Use the array index as a unique id. 
     * 
     * @see android.widget.ListAdapter#getItemId(int) 
     */ 
     public long getItemId(int position) { 
      return position; 
     } 

     /** 
     * Make a view to hold each row. 
     * 
     * @see android.widget.ListAdapter#getView(int, android.view.View, 
     *  android.view.ViewGroup) 
     */ 
     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.list_item_icon_text, null); 

       // Creates a ViewHolder and store references to the two children views 
       // we want to bind data to. 
       holder = new ViewHolder(); 
       holder.text = (TextView) convertView.findViewById(R.id.text); 
       holder.icon = (ImageView) convertView.findViewById(R.id.icon); 
       LinearLayout layout = (LinearLayout) convertView.findViewById(R.id.layout); 
       TextView child = new TextView(context); 
       child.setText("CHILD"); 
       layout.addView(child); 

       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.text.setText(DATA[position]); 
      holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2); 

      return convertView; 
     } 

     static class ViewHolder { 
      TextView text; 
      ImageView icon; 
     } 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setListAdapter(new EfficientAdapter(this)); 
    } 

    private static final String[] DATA = { 
      "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", 
      }; 
} 

enter image description here

statik kontrol holder ve layouts.

0

Fazladan bir sütuna sahip olmak kolaydır, sadece seçilen bir konum için bir öğeyi gösterip gizleyin. Öğe gösterilmediğinde bunları gizlemelisiniz. Aslında, bir RelativeLayout'u adaptörünüzden de şişirebilirsiniz, ancak bu elde etmek daha zor olabilir. senin Satır dosya düzeni her satır için aynı olacaktır EĞER

0

yardımcı

Umut sonra

sadece öğenin numarası (başka bir deyişle sütun)

ekleyebilir ArrayList (listviewadapter'u doldurmakla yükümlüdür) ve yalnızca notifydatasetchanged(true) veya adapter.notifyDataSetChanged()

numaralı telefonu arayın.
2
1) In your adapter with Arraylist override the appropriate constructor 
2) In your activity, make your variable data a field (type ArrayList 
3) When you add a location you can use data.add(location) 
4) Then you can call notifyDatasetChanged() on your adapter 

örnek kod: dinamik olarak xml görünümü ekleyemezsiniz eğer i bildiğim http://androidadapternotifiydatasetchanged.blogspot.in/

İlgili konular