2013-03-10 4 views
1

Мой главный activity имеет несколько ArrayLists и Arrays. Когда вы нажимаете кнопку «Копченая сигарета», приложение регистрирует определенную информацию в ArrayList. Один из мест ArrayListsSmoked содержит все места, где вы курили. Моя задача - сделать activity, который отображает в ListView место, где вы курили, и сколько раз вы там курили. Если отобразить locationsSmoked array в настоящее время она будет выглядеть следующим образомString ArrayList с использованием коллекций

Главная
Главная
дома
Работа
Работа
Школа
Школа

и так далее и так далее. Мне нужно пройти через это array, чтобы отобразить количество раз, которое вызывается каждый string, и дать значение integer. Затем мне необходимо объединить integer с соответствующими string. В параллельном array или многомерной array для отображения информации в другом activity именем Locations в этом activity «s ListView Так это выглядит, как этот

дом: 3
работа: 2
Школа: 2

Следует отметить, что даже если вы никогда не должны жестко кодировать элементы, в этой ситуации мне буквально не разрешают, потому что ArrayList мест будет постоянно расти. Есть еще activity, который я уже выполнил, что позволяет пользователю добавлять новые места в существующие ArrayList . Я думаю, что код, который я собираюсь перечислить ниже, из моей model.java и моих местоположений.java по большей части точнее. Однако ничего не отображается в listview, когда я перехожу на activity.

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

Спасибо за любую помощь, которую вы можете предложить.

Model.java

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.Calendar; 
import java.util.Collections; 
import java.util.GregorianCalendar; 

public class Model implements Serializable { 
public static final int END_MORNING = 11; // 11:00AM, inclusive 
public static final int END_AFTERNOON = 16; // 4:00PM, inclusive 
private int locNumber; 
private String locName; 

private GregorianCalendar startDate; 

private ArrayList<GregorianCalendar> datesSmoked = new ArrayList<GregorianCalendar>(); 
private ArrayList<String> locationsSmoked = new ArrayList<String>(); 
private ArrayList<String> locations = new ArrayList<String>(); 
private ArrayList<String> allIncidents = new ArrayList<String>(); 
private ArrayList<String> test = new ArrayList<String>(); 

public String [] defaultLocations = {"Home", "Work", "Commuting", "School", "Bar", "Restaurant", "Social Gathering", "Other"}; 
public String [] eachSmoked; 


public Model(GregorianCalendar date){ 
    startDate = date; 

    for (String s : this.defaultLocations) {    
     locations.add(s); 
    }   
} 

public Model(){ 
    this(new GregorianCalendar()); // now 
} 


public void setAllIncidentsArray() {   
    this.allIncidents.add(datesSmoked.toString()); 
    this.allIncidents.add(locationsSmoked.toString()); 
} 

public void setEachSmoked() { 
    for (int i = 0; i < locationsSmoked.size(); i++) { 
     locNumber = Collections.frequency(locationsSmoked, locationsSmoked.get(i)); 
     locName = locations.get(i); 
     test.add(i, locNumber + locName); 
    } 
} 

public ArrayList<String> getEachSmoked() {    
    return this.test; 
} 

public ArrayList<String> getAllIncidentsArray() { 
    return this.allIncidents; 
} 

public ArrayList<String> getlocationsArray() { 
    return this.locations; 
} 

public ArrayList<String> getLocationsSmokedArray() { 
    return this.locationsSmoked; 
} 

public ArrayList<GregorianCalendar> getDatesSmokedArray() { 
    return this.datesSmoked; 
} 

public void incrementCount(String location) { 
    this.datesSmoked.add(new GregorianCalendar()); // now 
    this.locationsSmoked.add(location);  
} 

public int getTodayCount() { 
    GregorianCalendar now = new GregorianCalendar(); 
    int todayDayOfYear = now.get(Calendar.DAY_OF_YEAR); 

    int count = 0; 
    for (GregorianCalendar day : this.datesSmoked) 
     if (day.get(Calendar.DAY_OF_YEAR) == todayDayOfYear) 
      count++; 

    return count; 
} 

public int getTotalCount() { 
    return this.datesSmoked.size(); 
} 

public double getAverage() { 
    if (getDays() > 0) 
     return (double) getTotalCount()/getDays(); 
    else 
     return 0.0; 
} 

public int getDays() { 
    return (new GregorianCalendar()).get(Calendar.DAY_OF_YEAR) - startDate.get(Calendar.DAY_OF_YEAR) + 1; 
} 

public int getMorning() { 
    int count = 0; 
    for (GregorianCalendar date : this.datesSmoked) 
     if (date.get(Calendar.HOUR_OF_DAY) <= END_MORNING) 
      count++; 

    return count; 
} 

public int getAfternoon() { 
    int count = 0; 
    for (GregorianCalendar date : this.datesSmoked) 
     if (date.get(Calendar.HOUR_OF_DAY) > END_MORNING && date.get(Calendar.HOUR_OF_DAY) <= END_AFTERNOON) 
      count++; 

    return count; 
} 

public int getEvening() { 
    int count = 0; 
    for (GregorianCalendar date : this.datesSmoked) 
     if (date.get(Calendar.HOUR_OF_DAY) > END_AFTERNOON) 
      count++; 

    return count; 
} 
} 

Locations.java (места деятельности)

import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class LocationActivity extends Activity { 

public static final String SMOKIN_DATA_FILE = "smokin.dat"; 

public static Model model = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_location); 

    restoreModel(); 

    ListView listView = (ListView) findViewById(R.id.location_listview_Id); 
    ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, model.getEachSmoked());   
    listView.setAdapter(listAdapter);  
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_location, menu); 
    return true; 
} 

public void restoreModel() { 
    // Restore from disk, or start with an empty model 
    try { 
     ObjectInputStream ois = new ObjectInputStream(
       openFileInput(SMOKIN_DATA_FILE)); 

     model = (Model) ois.readObject(); 
     ois.close(); 
    } catch (Exception e) { 
     Log.v("*** DEBUG ***", "Error writing to file: " + e); 
     model = new Model(); 
    } 
}  

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle item selection 
    switch (item.getItemId()) { 

    case R.id.menu_home_Id: 
     Intent homeIntent = new Intent(this, MainActivity.class); 
     startActivity(homeIntent); ; 
     return true; 

    case R.id.menu_all_incidents_Id: 
     Intent allIncidentsIntent = new Intent(this, AllIncidentsActivity.class); 
     startActivity(allIncidentsIntent); ; 
     return true; 

    case R.id.menu_edit_locations_Id: 
     Intent editLocationsIntent = new Intent(this, EditLocationsActivity.class); 
     startActivity(editLocationsIntent); ; 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 

} 
} 
+0

Время использования SQLite. –

+0

@ User117 Мне очень понравилось, к сожалению, это недопустимо для этой домашней работы – IrishWhiskey

ответ

1

Это выглядит как идеальный Oportunity использовать Hashtable<String, Integer>, Хеш будет содержать места в качестве ключей и граф как значения.

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

В конце этого вы имеете HashTable со всеми необходимыми данными.

+0

Большое вам спасибо, я попытаюсь решить ваше решение и решение user370305, прежде чем принимать ответ. – IrishWhiskey

+0

Я никогда не использовал 'HashTables', я смотрел документацию, и, честно говоря, это немного запутывало. Ваш ответ кажется, что он будет делать именно то, что мне нужно. Вы хотели бы опубликовать быстрый пример псевдокодов о том, как его реализовать? Я немного запутался в том, нужно ли мне вынуть свой «ArrayList» или перезаписать его, и как это повлияет на остальную часть моих «действий», все еще используя этот «ArrayList» – IrishWhiskey

+0

. Итак, я искал пример «hashtable» 'выполнив именно то, что вы предложили, и был вознагражден моим псевдокодом [здесь] (http://stackoverflow.com/questions/5211194/count-occurences-of-words-in-arraylist). Я находчив, и этот последний комментарий был не справедлив для вас, Ахмед, вам больше не нужно больше работать. Это был отличный ответ. Принято и благодарно! – IrishWhiskey

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