2013-04-09 3 views
6

Я хочу, чтобы listview выглядел как элемент управления datagrid в android. Все столбцы генерируются с помощью code-behand, который является динамическим. Модные фрагменты кода могут успешно создаваться, но список не отображается, как я ожидал. Что с ним не так?Можно ли вставить столбец в listview во время выполнения?

@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

для всех я знаю, если мы не можем добавить представление в XML динамически, это не представляется возможным – Senthil

+0

спасибо за ваш ответ, я хочу, чтобы загрузить данные, чтобы показать, как datagrid.i попробовал решение tablelayout, но он работает на slow.i нужно использовать listview, но моя таблица sqlite - это генерация objects.so любое другое решение для этого? – Whistler

ответ

0

Работы для меня в ApiDemos с дополнительными textView;

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

Проверьте ваш статический holder и layouts.

0

Легко иметь дополнительный столбец, просто показать и скрыть элемент для выбранной позиции. Вы должны скрыть их, как только элемент не будет показан.

Фактически, вы также можете раздуть RelativeLayout от вашего адаптера, но этого, возможно, будет труднее достичь.

Надежда, что помогает

0

макет файла строку, если будет одинаковым для каждой строки, то

вы можете просто добавить номер пункта (другими словами, ваша колонка)

на ваш ArrayList (который несет ответственность за заполнение listviewadapter) и просто позвоните notifydatasetchanged(true) или adapter.notifyDataSetChanged()

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 

Пример кода: http://androidadapternotifiydatasetchanged.blogspot.in/

Смежные вопросы