2015-04-21 3 views
0

У меня есть процесс, в котором пользователь выбирает город, а затем видит врачей в этом состоянии.Android ListView, добавляя элементы из базы данных в listview

У меня есть результаты, которые показывают название медицинской практики:

@Override 
    protected void onResume() { 
     super.onResume(); 

     setProgressBarIndeterminateVisibility(true); 

     Bundle b = getIntent().getExtras(); 



     final String[] resultArr = b.getStringArray("selectedItems"); 

     String location = b.getString("selectedItems"); 



     ParseQuery<ParseUser> query = ParseUser.getQuery(); 

     query.orderByAscending(ParseConstants.KEY_PRACTICE_NAME); 

     query.findInBackground(new FindCallback<ParseUser>() { 
      @Override 
      public void done(List<ParseUser> users, ParseException e) { 
       setProgressBarIndeterminateVisibility(false); 

       if (e == null) { 
        // Success 
        //store users variable in Parse to mMidwifeLocations 
        mMidwives = users; 
        mCurrentUser = ParseUser.getCurrentUser(); 
        //mMidwifeType = ParseUser.getString("usertype"); 

        //store users in string array, locations 
        String[] midwives = new String[mMidwives.size()]; 
        String[] locations = new String[mMidwives.size()]; 
        String check; 
        String location; 

        int i = 0; 
        for(ParseUser user : mMidwives) { 
         //get city value from user, assign it to check variable 

         location = user.getString("city"); 

         check = user.getString("userType"); 

         if (!Arrays.asList(midwives).contains(check) && type != "patient" && Arrays.asList(resultArr).contains(location)) { 

          //in locations array, assign practiename values 
           midwives[i] = user.getString("practicename"); 


         } 
        } 
        i++; 

Я также хочу, чтобы вернуться в списке первичного контакта, адрес и практика philosophy..what является лучшей стратегией, чтобы сделать это ? Я использую тип списка simple_list_item_1 ... есть другие типы списков ... интересно, может ли использование одного из них может быть ответом. Спасибо заранее.

ответ

0

Прежде всего, вы, вероятно, захотите сделать все это внутри метода onCreate().

Я не уверен, если это то, что вы хотите, но из того, что я понимаю, я пишу это.

Я бы лично записывать все данные, которые вы хотите в строкового массива в вашем strings.xml

<string-array name="string_array"> 
<item name ="item1"> item1 </item> 
....... 
</string-array> 

Тогда я бы просто захватить эти данные и отсортировать их в порядке, в каком порядке ваши состояния в Таким образом, они будут соответствовать. Но, посмотрев на то, что вы сделали, вы сделали это с легкостью.

Затем создание настраиваемого макета присваивает ему каждую строку.

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

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="Large Text" 
    android:id="@+id/textView" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 
</RelativeLayout> 

Изменить этот макет, как вы хотели бы видеть свои данные, а также добавить больше текстовых просмотров, сколько вам потребуется.

Теперь вам нужно будет создать адаптер для этого списка.

class adapter extends BaseAdapter { 

    ArrayList<SingleRow> arrayList; 
    Context context; 

    adapter(Context contxt) { 
     context = contxt; 
     arrayList = new ArrayList<SingleRow>(); 
     Resources res = contxt.getResources(); 
     String[] items= res.getStringArray(R.array.string_array); 

     for (int i = 0; i < 1; i++) {//Change the 1 in i < 1 to how big your list is. 
      arrayList.add(new SingleRow(items[i])); 
     } 

    } 

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

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

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

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

     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View row = inflater.inflate(R.layout.items_layout, parent, false); 
     TextView item1 = (TextView) row.findViewById(R.id.txtItem1); 
     SingleRow temp = arrayList.get(position); 
     items.setText(temp.items); 

     return row; 
    } 
} 

class SingleRow { 
    String items; 
    SingleRow(String items) { 
     this.items = items; 

    } 
} 

После прочтения кода и анализа его вы бы выяснить, как добавить данные в TextViews для каждого элемента строки, и сделать так, сколько вам нужно.

Теперь вы должны установить адаптер к ListView по ...

ListView listView = (ListView) findViewById(R.id.itemListView); 
listView.setAdapter(new adapter(getActivity())); 

Теперь вы должны быть в состоянии сделать макет пользовательских ListView. Если возникнут какие-либо проблемы, просто прокомментируйте этот ответ и попытайтесь его исправить.

Удачи.

+0

только для уточнения; прямо сейчас я прохожу в город, выбранный в предыдущем действии, и в OnResume я просматриваю данные, чтобы найти все медицинские практики в выбранном городе, и адаптер подталкивает этот результат к списку ... ваше решение здесь похоже, есть адаптер, который извлекает информацию из макета, который не является списком, но преобразует этот макет в список? Я все равно хочу, чтобы результаты были ограничены запросом. Поэтому я бы поставил код адаптера, где у меня есть текущий адаптер, который теперь просто вытягивает названия практики на основе города? –

+0

Я понял это, но в случае, если кто-либо другой ищет подробное описание этого, это хороший источник https://github.com/codepath/android_guides/wiki/Using-an-ArrayAdapter-with-ListView –

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