2015-05-26 5 views
0

---- Новый код: ---- Как это возможно, если этот новый код добавит дополнительную строку с меньшим шрифтом? Ожидаемый результат должен быть таким:Установить несколько строк программным способом

Hamburger ($ 2)

Хорошая говядина с салатом

Pizza ($ 3)

С большим сыром

Chicken Nuggets ($ 4)

С лучший соус

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    final ListView listview = (ListView) findViewById(R.id.listview); 
     String[] values = new String[] { "Food (€4)", "Food also (€3)", "Food again (€2,50)" }; 

     final ArrayList<String> list = new ArrayList<String>(); 
     for (int i = 0; i < values.length; ++i) { 
      list.add(values[i]); 
     } 
     final StableArrayAdapter adapter = new StableArrayAdapter(this, android.R.layout.simple_list_item_1, list); 
     listview.setAdapter(adapter); 
} 

private class StableArrayAdapter extends ArrayAdapter<String> { 

    HashMap<String, Integer> mIdMap = new HashMap<String, Integer>(); 

    public StableArrayAdapter(Context context, int textViewResourceId, 
           List<String> objects) { 
     super(context, textViewResourceId, objects); 
     for (int i = 0; i < objects.size(); ++i) { 
      mIdMap.put(objects.get(i), i); 
     } 
    } 
} 

---- Старый код: ----

Я хотел бы поместить 'список меню' программно .. Что-то вроде этого, как выход:

Hamburger Хорошая говядина с салатом

Пицца с большим сыром

куриные наггетсы с лучшим соусом

На данный момент все предложения программируются отдельно:

TextView mContent = new TextView(this); 
mContent.setText("Hamburger"); 
mContent.setTextColor(getResources().getColor(android.R.color.black)); 
mContent.setPadding(32, 8, 32, 0); 
mContent.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

((LinearLayout) linearLayout).addView(mContent); 

TextView mContent2 = new TextView(this); 
mContent2.setText("TextView mContent = new TextView(this); 
     //mContent.setText("Broodje hamburger (€6)\nBroodje hotdog (€4,50)\nPizza (€7)\nSpaghetti (€5)"); 
     mContent.setText("Broodje hamburger (€6)"); 
     mContent.setTextColor(getResources().getColor(android.R.color.black)); 
     mContent.setPadding(32, 8, 32, 0); 
     mContent.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

     ((LinearLayout) linearLayout).addView(mContent); 

     TextView mContent2 = new TextView(this); 
     mContent2.setText("Met echt rundbeef, sla, tomaten en een lekker sausje"); 
     mContent2.setTypeface(null, Typeface.ITALIC); 
     mContent2.setTextColor(getResources().getColor(android.R.color.black)); 
     mContent2.setPadding(32, 0, 32, 16); 
     mContent2.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

     ((LinearLayout) linearLayout).addView(mContent2);"); 
mContent2.setTypeface(null, Typeface.ITALIC); 
mContent2.setTextColor(getResources().getColor(android.R.color.black)); 
mContent2.setPadding(32, 0, 32, 16); 
mContent2.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

((LinearLayout) linearLayout).addView(mContent2); 

Есть ли более простой способ решить эту проблему?

ответ

0

Вы можете использовать ListView. Он используется для отображения списка вещей в организованном виде, как вам нужно сейчас.

См. this учебник.

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

StableArrayAdapter.java

// define your custom adapter 
    private class StableArrayAdapter extends ArrayAdapter<String> { 

     ArrayList<String> items1; 
     ArrayList<String> description1; 

     ViewHolder viewHolder; 

     public StableArrayAdapter(Context context, int textViewResourceId, ArrayList<String> items, ArrayList<String> description) { 

      // let android do the initializing :) 
      super(context, textViewResourceId, items); 
      this.items1=items; 
      this.description1 = description; 
     } 

     @Override 
     public int getItemViewType(int position) { 
      return (position == this.getCount() - 1) ? 1 : 0; 
     } 

     private class ViewHolder { 
      TextView item; 
      TextView desc; 
     } 

     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 

      if (convertView == null) { 
       LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       convertView = inflater.inflate(R.layout.single, parent, false); 
       viewHolder = new ViewHolder(); 
       viewHolder.item = (TextView) convertView.findViewById(R.id.txt_item); 
       viewHolder.desc = (TextView) convertView.findViewById(R.id.txt_desc); 
       convertView.setTag(viewHolder); 
      } else{ 
       viewHolder = (ViewHolder) convertView.getTag(); 
      } 
      viewHolder.item.setText(items1.get(position).toString()); 
      viewHolder.desc.setText(description1.get(position).toString()); 

      return convertView; 
     } 

     @Override 
     public long getItemId(int arg0) { 
      return arg0; 
     } 

    } 

сингл.XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/txt_item" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <TextView 
     android:id="@+id/txt_desc" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 
+0

Здравствуйте, такой же комментарий как MikeKeepsOnShine: При проверке учебника Vogel, я использовал пример кода из главы 2. Но вместо списка, единственным результатом является первый элемент списка (например: «Android «). Я делаю что-то неправильно? – 0846277

+0

Пожалуйста, обновите свой код –

+0

Моя ошибка .. Высота была очень маленькой и только показала один результат. Другие результаты были видны с помощью прокрутки – 0846277

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