2015-01-28 2 views
0

Здравствуйте, мне нужна Ваша помощь в отображении данных из базы данных в действии, я много пытался, но понятия не имею, как это сделать. Я создаю какое-то приложение погоды. Он содержит данные в базе данных на устройстве. Существует класс DataBaseHandler, который возвращает список со всеми точками.Android нужна помощь, отображающая вещи из базы данных sqlite

public List<Spot> getUserSpotList(int id){ 
      List<Spot> spotList = new ArrayList<Spot>(); 
      String selectQuery = "SELECT " +SPOT_ID+","+ SPOT_NAME + ","+ SPOT_LATITUDE + ","+SPOT_LONGITUDE+","+SPOT_WIND_SPEED +","+SPOT_WEATHER_ICON+ 
        " FROM " + TABLE_SPOT + " WHERE "+SPOT_USER_ID + "="+id; 

      SQLiteDatabase db = this.getWritableDatabase(); 
      Cursor cursor = db.rawQuery(selectQuery, null); 

      if (cursor.moveToFirst()) { 
       do { 
        Spot spot = new Spot(); 
        spot.setSpot_id(Integer.parseInt(cursor.getString(0))); 
        spot.setSpotName(cursor.getString(1)); 
        spot.setSpotLatitude(cursor.getString(2)); 
        spot.setSpotLongitude(cursor.getString(3)); 
        spot.setWindSpeed(Double.parseDouble(cursor.getString(4))); 
        spot.setSpotWeatherIcon(cursor.getString(5)); 
        // Adding User to list 
        spotList.add(spot); 
       } while (cursor.moveToNext()); 
      } 

     return spotList; 
     } 

и у меня есть активность с ListView XML в ведьму я хочу, чтобы отобразить некоторые вещи из кода выше, основываясь на другом RelativeLayout для одного элемента. SpotActivity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     tools:context="com.example.mk.rcwindy.SpotActivity"> 

     <ListView 
      android:id="@+id/listLajout" 
      android:layout_width="wrap_content" 
      android:layout_height="400dp" 
      android:layout_weight="1" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" /> 

    </RelativeLayout> 

А вот Относительный макет для одного элемента в списке выше. Я хотел бы связать SpotName с базой данных с TextView id = SpotName, Windspeed из базы данных с помощью Windspeed Text View и отображать изображение в ImageView на основе SpotWeatherIcon из базы данных. spotlista_layout.xml

<?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="?android:attr/listPreferredItemHeight" 
    android:padding="6dip" 
     android:id="@android:id/list"> 



     <ImageView 
      android:id="@+id/SpotAvilabilityIcon" 
      android:layout_width="20dp" 
      android:layout_height="match_parent" 
      android:background="@color/green_apple"/> 

     <ImageView 
      android:id="@+id/WeatherIcon" 
      android:layout_width="70dp" 
      android:layout_height="match_parent" 
      android:layout_toLeftOf="@+id/WindSpeed" 
      android:scaleType="centerInside" 
      /> 
     <TextView 
      android:id="@+id/WindSpeed" 
      android:text="" 
      android:textSize="30dp" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_toLeftOf="@+id/WindSpeedUnit" 
      android:layout_gravity="center" 
      android:layout_centerVertical="true"/> 
     <TextView 
      android:text="m/s" 
      android:textSize="30dp" 
      android:id="@+id/WindSpeedUnit" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:layout_centerVertical="true" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" /> 

     <FrameLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_alignParentTop="true" 
      android:layout_marginLeft="10dp" 
      android:layout_toRightOf="@+id/SpotAvilabilityIcon" 
      android:layout_toStartOf="@+id/WeatherIcon" 
      android:layout_toLeftOf="@+id/WeatherIcon" 
      android:layout_centerVertical="true"> 

      <TextView 
       android:id="@+id/SpotName" 
       android:text="" 
       android:textSize="40dp" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_gravity="center" 
       android:layout_centerVertical="true"/> 
     </FrameLayout> 


    </RelativeLayout> 

А вот код активности SpotActivity

public class SpotActivity extends ActionBarActivity { 


int loggedUserId; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_spot); 

    Intent intent = getIntent(); 

    if (null != intent) { 
     loggedUserId = intent.getIntExtra("logged", 0); 
    } 

    String text = "logged user id = "+loggedUserId; 
    Toast t1 = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT); 
    t1.show(); 




} 

public int userIdSender(){ 
    return loggedUserId; 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_spot, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    if (id== R.id.action_new){ 
     Intent intent = new Intent(this, SpotAddActivity.class); 
     intent.putExtra("logged",loggedUserId); 
     startActivity(intent); 
    } 

    return super.onOptionsItemSelected(item); 
} 

Спасибо за помощь! Я пытался это сделать и все еще испытываю большие проблемы, поэтому теперь я прошу помощи. Это школьный проект, над которым я работаю, и это последнее, что мне нужно сделать, чтобы заставить приложение работать. Показать материал: D

+0

Где находится ваш список адаптеров? – Karakuri

+0

У меня нет одного, вероятно, из того, что я знаю, это часть, где мне нужна помощь от Тебя. Я пытаюсь полностью понять адаптеры, но все же не могу заставить их работать с моим приложением. @Karakuri –

+0

начать с документа http://developer.android.com/guide/topics/ui/layout/listview.html – njzk2

ответ

0

Вам необходимо создать адаптер для вашего ListView. Рекомендую посмотреть The World Of ListView.

Все, что делает адаптер, представляет собой представление для каждого элемента в вашем наборе данных. Для данных курсора вы должны подклассифицировать CursorAdapter и реализовать методы newView() и bindView() как минимум.

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