2013-07-29 15 views
7

Mam aplikację, w której chciałbym wyświetlić niestandardowy widok listy składający się z dwóch widoków tekstowych wewnątrz niestandardowego okna dialogowego w systemie Android. Do tej pory mam trudny czas zastanowić się, jak połączyć te dwa i wygenerować zawartość okna dialogowego.Android - Wykonywanie niestandardowego widoku list w niestandardowym oknie dialogowym prawidłowo

Próbowałem podążać za spersonalizowaną listą samouczków na ekranie, mając nadzieję na ustawienie adaptera dialogowego, ale bez skutku.

Jak dotąd, jest to, co mam do tej pory:

To list_row_dialog.xml, układ dla wiersza zawierającego dwa TextView:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="50dp" 
    android:orientation="horizontal" 
    android:padding="5dip" > 

<TextView 
    android:id="@+id/unit" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textStyle="bold" 
    android:typeface="sans" /> 

<TextView 
    android:id="@+id/quantity" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:textColor="#343434" 
    android:textSize="12sp" /> 

</RelativeLayout> 

A oto plik dialog_main.xml, plik układu, którego chcę użyć w oknie dialogowym, to w zasadzie listView.

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

<ListView 
    android:id="@+id/custom_list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:dividerHeight="1dp" /> 

</LinearLayout> 

A oto CustomListAdapterDialog.java, nie jestem pewien, czy nawet trzeba to wykorzystać do wyświetlania danych w oknie dialogowym:

public class CustomListAdapterDialog extends BaseAdapter { 

private ArrayList<ItemClass> listData; 

private LayoutInflater layoutInflater; 

public CustomListAdapterDialog(Context context, ArrayList<ItemClass> listData) { 
    this.listData = listData; 
    layoutInflater = LayoutInflater.from(context); 
} 

@Override 
public int getCount() { 
    return listData.size(); 
} 

@Override 
public Object getItem(int position) { 
    return listData.get(position); 
} 

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

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    if (convertView == null) { 
     convertView = layoutInflater.inflate(R.layout.list_row_dialog, null); 
     holder = new ViewHolder(); 
     holder.unitView = (TextView) convertView.findViewById(R.id.unit); 
     holder.quantityView = (TextView) convertView.findViewById(R.id.quantity); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.unitView.setText(listData.get(position).getVariant().toString()); 
    holder.quantityView.setText(listData.get(position).getUnit().toString()); 

    return convertView; 
} 

static class ViewHolder { 
    TextView unitView; 
    TextView quantityView; 
} 

} 

Początkowo próbowałem tego kodu, aby wyświetlić okno dialogowe Skrzynka:

private void showDialog(){ 
    final Dialog dialog = new Dialog(this); 
    dialog.setContentView(R.layout.dialog_main); 


    dialog.show(); 
} 

ale to tylko pokazuje, jeden pusty wiersz, to jest bardzo jasne, że nie jestem wypełniania go prawidłowo.

Jakieś pomysły dla każdego? Ponadto mogę zapełniać okna dialogowe w funkcji showDialog(), ponieważ mam również dane, które chcę zapełnić w tej samej klasie java.

Odpowiedz

23

Czy robisz co następuje? Będziesz musiał nadmuchać plik układu dialog_main, znaleźć ListView, ustawić adapter i OnItemClickListener dla niego. Następnie można użyć metody okna dialogowego, aby uzyskać listę do wyświetlenia.

private void showDialog(){ 

    final Dialog dialog = new Dialog(this); 

    View view = getLayoutInflater().inflate(R.layout.dialog_main, null); 

    ListView lv = (ListView) view.findViewById(R.id.custom_list); 

    // Change MyActivity.this and myListOfItems to your own values 
    CustomListAdapterDialog clad = new CustomListAdapterDialog(MyActivity.this, myListOfItems); 

    lv.setAdapter(clad); 

    lv.setOnItemClickListener(........); 

    dialog.setContentView(view); 

    dialog.show(); 

} 

Nawiasem mówiąc, twój adapter wygląda dobrze. To nie działa, ponieważ nie dajesz mu nic do pracy.

+0

Czekaj, poprawię swój kod i zobaczę, co się stanie ... – Razgriz

+0

W końcu udało mi się go uruchomić! Dziękuje Panu bardzo! Utknąłem w tym zadaniu przez około 3 dni. – Razgriz

Powiązane problemy