2016-07-05 12 views
2

Ich muss nur neben meine Produkte in einem Listview einen Preis haben, und sie müssen ausgerichtet werden, wie folgt,Wie kann ich Text links und rechts zur gleichen Zeit in einem Listview ausrichten

  • Die Produktname auf der linken Seite, und;
  • Der Preis auf der rechten Seite

Dies ist der Code:

public ListView lstMenuItems; 
public String[] menuItems = {"Fillet On The Bone", "Rump", "Sirloin", "French Cut Pork Cutlets", "Spatchcock Chicken", "Sticky Smoked Paprika Chicken Wings", "Craft Beer Battered Fish", "Butter Chicken", "Pomegranate & Chilli Marinated Lamb Skewer", "Pork Belly Skewer", "Harissa Basted Chicken Skewer"}; 
public double[] itemPrice = {135, 99, 99, 99, 89, 79, 60, 75, 99, 95, 69}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.menu); 
    TitleBar(waiterName); 
    GetListViewValue(); 
    menuItems = AddPad(menuItems, itemPrice); 
    MenuList(); 

} 

    public void MenuList() { 

    lstMenuItems = (ListView)findViewById(R.id.lvProducts); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.category_list, menuItems); 
    lstMenuItems.setAdapter(adapter); 

} 


public String[] AddPad(String[] menu, double[] price) { 
    NumberFormat format = NumberFormat.getCurrencyInstance(Locale.getDefault()); 
    for (int i = 0; i < menu.length; i++) { 
     menu[i] = String.format("%-60s %s",menu[i], format.format(price[i])); 
    } 
    return menu; 
} 

Die String.format Klasse nicht zu funktionieren scheint. Gibt es eine Möglichkeit, dies zu tun?

Bitte Hilfe

+1

sollten Sie einen benutzerdefinierten ListView-Adapter schreiben http://StackOverflow.com/a/33774046/5381331 –

+0

Nie Pad durch Hinzufügen von Leerzeichen in einer echten App. Das ist gut für High-School-Apps, wenn Sie gerade lernen, aber es ist schlampig und ungenau für eine echte App. Es ist nicht einmal sicher zu arbeiten - ein Leerzeichen ist nicht immer die gleiche Breite (was ist, wenn sie die Schriftgröße in den Einstellungen geändert haben). Der eigentliche Weg dazu besteht darin, ein benutzerdefiniertes Layout für Ihren Adapter zu erstellen. –

+0

Wie würde ich das machen? @GabeSechan –

Antwort

1

Erstellen Sie Ihren benutzerdefinierten Adapter. In getView können Sie die gewünschte Zeile anpassen. Sie können BaseAdapter dafür erweitern.

0

sollten Sie eine benutzerdefinierte listview Adapter schreiben, dies zu erreichen:

public class myCustomAdapter extends ArrayAdapter<ProductClass> { 

    public myCustomAdapter(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
    } 

    public myCustomAdapter(Context context, int resource, List<ProductClass> pc) { 
     super(context, resource, pc); 
    } 

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

     View view = convertView; 

     if (view == null) { 
      LayoutInflater vi; 
      vi = LayoutInflater.from(getContext()); 
      view = vi.inflate(R.layout.custom_list_row, null); 
     } 

     ProductClass p = getItem(position); 

     if (p != null) { 
      TextView product_name = (TextView) v.findViewById(R.id.product_name); 
      TextView product_price = (TextView) v.findViewById(R.id.product_price); 
      product_name.setText(p.getProductName()); 
      product_price.setText(p.getCategory().getPrice()); 

     } 
     return view; 
    } 

} 

eine ListView auf Ihre Aktivität Layout hinzufügen:

<ListView 
    android:id="@+id/ProductListView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
</ListView> 

ein Layout XML erstellen und benennen Sie es custom_list_row.xml. Dies ist für ListView Zeilen.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 

    <TextView 
       android:id="@+id/product_name" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:gravity="right"/> 

<TextView 
       android:id="@+id/product_price" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:gravity="left"/> 

</LinearLayout> 

Und in Ihrer Aktivität:

ListView ProductListView = (ListView) findViewById(R.id.ProductListView); 
List<ProductClass> lst = myProductList(); 
myCustomAdapter productAdapter = new myCustomAdapter(this, R.layout.custom_list_row, lst); 
ProductListView.setAdapter(productAdapter); 

Hinweis: lst ist Ihre Produktliste, die Produktnamen enthält und es den Preis.

EDIT: Ihre Produktklasse wie diese diese

public class ProductClass { 
     public String product_name; 
     public float price; 

     public String getProductName() 
     { 
      return product_name; 
     } 
     public String getPrice() 
     { 
      return String.ValueOf(price); 
     } 
} 

Hoffnung aussehen muss helfen.

+0

Wie soll meine ProductClass aussehen? –

+0

@Siphe sehe mein Update bitte :) –

Verwandte Themen