2016-05-15 3 views
0

Я использую listview в alertdialog, но когда диалог показывает, его ничего не отображает. Объект не пуст, поскольку я его заполняю и добавляю его в список массивов перед alertdialog. Heres код для моего XML и классов:alertdialog listview с пользовательским адаптером ничего не показывает

Где я устанавливаю адаптер:

   AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
      builder.setTitle("Select a match"); 
      //insert array to constructor 
      LayoutInflater inflater = getLayoutInflater(savedInstanceState); 
      View dialogLayout = inflater.inflate(R.layout.dialoglist, null); 
      matchAdapter testAdapter = new matchAdapter(getContext(), userInfos); 
      ListView listView = (ListView) dialogLayout.findViewById(R.id.dialogListView); 
      listView.setAdapter(testAdapter); 
      listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
        //do something 
       } 
      }); 
      builder.setView(dialogLayout); 

      AlertDialog alert = builder.create(); 
      alert.show(); 

пользовательский адаптер:

class matchAdapter extends ArrayAdapter<userInfo> { 

public matchAdapter(Context context, ArrayList<userInfo> test) { 
    super(context, R.layout.match_result, test); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = LayoutInflater.from(getContext()); 

    View customRow = inflater.inflate(R.layout.match_result, parent, false); 
    userInfo singleItemTest = getItem(position); 

    /* 
    TODO: get references to layout elements 
    */ 

    TextView username = (TextView) customRow.findViewById(R.id.matchUsername); 
    TextView sex = (TextView) customRow.findViewById(R.id.matchSex); 
    TextView age = (TextView) customRow.findViewById(R.id.matchAge); 
    Button sendRequest = (Button) customRow.findViewById(R.id.matchSendRequest); 

    username.setText(singleItemTest.getUserName()); 

    return customRow; 
}} 

row.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:id="@+id/match_result" 
android:orientation="horizontal" 
android:padding="16dp" 
android:minHeight="?android:attr/listPreferredItemHeight" 
android:gravity="left"> 
<TextView 
    android:id="@+id/matchUsername" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Username" 
    android:layout_marginRight="10dp"/> 

<TextView 
    android:id="@+id/matchSex" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Sex" 
    android:layout_marginRight="10dp"/> 

<TextView 
    android:id="@+id/matchAge" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Age" 
    android:layout_marginRight="10dp"/> 


<Button 
    android:id="@+id/matchSendRequest" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Send Request" 
    android:minHeight="5dp" 
    android:minWidth="0dp" 
    android:layout_marginLeft="80dp"/> 

dialoglist.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/dialogListView" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent"> 

</ListView> 

+0

Использовать фрагмент как диалог – Haroon

+0

Не могли бы вы показать, что вы имеете в виду, в коде? – SpecialSnowflake

+0

http://javatechig.com/android/android-dialog-fragment-example Используйте его как пример – Haroon

ответ

0

Майка. М был прав в своем комментарии. Аррайалист действительно был пуст. Однако я исправил это сейчас. Глупый контроль над моей петлей.

0

В вашем адаптере добавить объект ArrayList<userInfo> infos

Сейчас в Constractor использовать этот

public matchAdapter(Context context, ArrayList<userInfo> test) { 
    super(context, R.layout.match_result, test); 
    infos=test; 

} 

Теперь getView обратного вызова понравится:

userInfo singleItemTest = infos.get(position); 

Я думаю, что это решит вашу проблему :)

+0

Это то же самое, что и «ArrayAdapter» по умолчанию. –

+0

Не работает. Диалог по-прежнему не показывает элементов. – SpecialSnowflake

+1

В адаптере массива, переопределении и методе getCount() и возврате infos.size() –

0

Вы накачивание match_result.xml в адаптере, но вы пытаетесь получить доступ к идентификаторам в row.xml

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