2013-05-09 1 views
0

Я использую ScrollView, чтобы показать все продукты, которые пользователи добавляют в свою корзину. Я создаю прокрутку, и в нее я создаю линейный макет «intern». Затем я строю каждую строку в цикле. Вот XML-Android ScrollView кажется не распознает его прямого ребенка

<ScrollView 
    android:id="@+id/scroll" 
    android:layout_width="300dp" 
    android:layout_height="230dp" 
    android:layout_marginLeft="10dp" > 

    <LinearLayout 
     android:id="@+id/intern" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"></LinearLayout> 
</ScrollView> 

Вот код Java.

for(Carrello cns : carrello){ 

      LinearLayout prodotto = new LinearLayout(context); 
      LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(/**/LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
      prodotto.setLayoutParams(lp); 
      //Product name 
      TextView nome_p = new TextView(context); 
      nome_p.setWidth(dpToPx(115)); 
      nome_p.setTextColor(getResources().getColor(R.color.grey)); 
      nome_p.setText(cns.getNomeProdotto()); /**/ 
      //Counts 
      TextView quantita = new TextView(context); 
      quantita.setWidth(dpToPx(80)); 
      quantita.setGravity(Gravity.CENTER); 
      quantita.setTextColor(getResources().getColor(R.color.grey)); 
      quantita.setTextAppearance(context, R.style.quantita); 
      quantita.setText(cns.getQuantita()); 
      //Price 
      TextView prezzo = new TextView(context); 
      prezzo.setWidth(dpToPx(70)); 
      prezzo.setPadding(dpToPx(5), 0, 0, 0); 
      prezzo.setTextColor(getResources().getColor(R.color.grey)); 
      prezzo.setTextAppearance(context, R.style.prezzo); 
      prezzo.setText("€"+cns.getCosto()); 
      //Cancella 
      Button canc = new Button(context); 
      LinearLayout.LayoutParams lp_btn = new LinearLayout.LayoutParams(/*LinearLayout.LayoutParams.WRAP_CONTENT*/40,40/*LinearLayout.LayoutParams.WRAP_CONTENT*/); 
      lp_btn.setMargins(0, dpToPx(10), 0, 0); 
      canc.setLayoutParams(lp_btn); 
      canc.setBackground(getResources().getDrawable(R.drawable.btn_canc)); 
      canc.setId(Integer.parseInt(cns.getIDprodotto()));/**/ 
      Log.d("ID-CANC",String.valueOf(canc.getId())); 
      //create the line 
      prodotto.addView(nome_p); 
      prodotto.addView(quantita); 
      prodotto.addView(prezzo); 
      prodotto.addView(canc); 
      intern.addView(prodotto); 
      i++; 
}//end for 

Затем добавьте intern к просмотру прокрутки:

scroll.addView(intern); 

Но когда я запустить эмулятор, LogCat говорит, что «ScrollView может принять только один прямой ребенок», и сбои приложения.

+0

scrollview может иметь только один макет как прямой ребенок !. Все, что вам нужно сделать, это объявить любой макет, который вы хотите, например, у вас есть стажер в качестве макета и добавить свои представления в эту ViewGroup. – Manoj

ответ

2

Не используйте scroll.addView(intern);,

, потому что вы уже определили ребенка в Scrollview в вашем layout.xml

Вместо этого попробуйте, как показано ниже.

LinearLayout intern = (LinearLayout) findViewById(R.id.intern); 

затем использовать ваш цикл, чтобы добавить мнение в intern

Это, с его ...

Нет необходимости называть addview для прокрутки

Надеется, что это помогает

+0

вы правы, теперь это работает. Спасибо! – MikeKeepsOnShine

1

ScrollView уже имеет дочерний элемент, определенный в файле макета. scroll.addView(intern); вызовет ошибку.

Просто добавьте scroll=(ScrollView) findViewById(R.id.intern) до петли и удалите scroll.addView(intern);.

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