Извлечение данных из списка - PullRequest
0 голосов
/ 31 октября 2011

В настоящее время у меня есть пользовательский listview с двумя строками текста в каждом элементе, один для текущего времени и один для текста, который вводит пользователь. Я делаю это путем создания нового hashmap и добавления к <ArrayList<HashMap<String,String>>, который использует listview. Я хотел бы сохранить свои данные в sharedPreferences, но мне кажется, что я получаю только последний ввод от пользователя. У меня вопрос: есть ли способ извлечь данные из списка и добавить их в общие настройки? Или добавить данные из массива в общие настройки?

Вот мой код ниже:

@Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main_feed);


            //create button and implement on click listener
            sendButton = this.findViewById(R.id.sendPostButton);
            sendButton.setOnClickListener(this);

            //create text field and add text change listener
            postTextField = (EditText)findViewById(R.id.postTextField);
            postTextField.addTextChangedListener(TextEditorWatcher);


            //create text views for seeing the posts and character count
            currentTimeTextView = (TextView)findViewById(R.id.postTimeTextView);
            mainPostTextView = (TextView)findViewById(R.id.postTextView);
            characterCountView = (TextView)findViewById(R.id.charsleft);
            characterCountView.setText("150 chars left");

            //text view for event name and set the text
            feedName = (TextView)findViewById(R.id.nameOfFeed);
            currentFeedName = CreateFeedActivity.eventFeedName;
            feedName.setText(currentFeedName);

            list = new ArrayList<HashMap<String,String>>();

            //create the adapter for the list view
            adapter = new SimpleAdapter(
                    this,
                    list,
                    R.layout.post_layout,
                    new String[]{"time", "post"},
                    new int[]{R.id.postTimeTextView, R.id.postTextView});

            //set list adapter 
            setListAdapter(adapter);

            //place the current feed number into a variable here
            currentFeedCount = CreateFeedActivity.feedCount;

            //create the hashmap for the list view
            feedPostMap = new HashMap<String, String>();

            //place the stored data into the view again if activity has already been created
            if (LiveFeedrHomeActivity.feedOccurs == 1){ 
                Log.d(TAG, "in feed occurs is 1");

                //get the shared pref
                sharedPref = getSharedPreferences(MY_FEED, 0);
                Map<String, ?> map = new HashMap<String, String>();
                map = sharedPref.getAll();

                //convert from the map to the hashmap
                feedPostMap = (HashMap<String, String>) map;

                //add to the list
                list.add(feedPostMap);

                //refresh the adapter
                adapter.notifyDataSetChanged();

                Log.d(TAG, "feedmap get all");






            }

            //make variable feed = 1 so that you can't create another feed
            LiveFeedrHomeActivity.feedOccurs = 1;


     }

@Override
    public void onClick(View button) {
        switch(button.getId()){
        case R.id.sendPostButton:

            //create date
            date = new Date();

            //get current time
            currentTime = new SimpleDateFormat("h:mm aaa").format(date);

            SendToDatabase();

            DisplayUserInput();

            break;
        }



@Override
    public void onStop() {
        super.onStop();
        Log.d(TAG, "on stopp'd");

        //get shared pref settings
        sharedPref = getSharedPreferences(MY_FEED, 0);
        sharedPrefEditor = sharedPref.edit();



        //get the items in the hash map and add it to the 
        //shared preferences
        for (String string : feedPostMap.keySet()){
            sharedPrefEditor.putString(string, feedPostMap.get(string));

    //  }
        sharedPrefEditor.commit();



    }

1 Ответ

0 голосов
/ 31 октября 2011

Я думаю, что ваша проблема, это для цикла,

for (String string : feedPostMap.keySet()){             
sharedPrefEditor.putString(string, feedPostMap.get(string));      
  } 

так что попробуйте,

Set<String> s = new HashSet<String>();
   for (int i=0;i<list.size();i++){      
       s.add(list.get(i).get(string));     
   } 

 sharedPrefEditor.putStringSet(stringSet, s); 

Попробуйте это для набора строк для редактирования в sharedpreference,

putStringSet(String key, Set<String> values) 

Установить набор значений String в редакторе настроек, которые будут записаны при вызове commit ().

для получения дополнительной информации смотрите Android-SharedPreferences

...