User14s Ответов: 1

Как хранить Listitems в общих предпочтениях


У меня есть 2 массива с именами "метки" и "значения", я отправляю эти элементы в класс адаптера и устанавливаю его в listview. Теперь я хочу, чтобы все эти значения были сохранены в общих настройках, а также они должны быть доступны для редактирования при обновлении изменений. как использовать Sharedpreferences в listview, я не получаю.

public class MyProfile_Fragment extends Fragment implements View.OnClickListener{
    ArrayList<string> label;
    ArrayList<string> values;
    ArrayList<SelectUser> selectUsers = null;
    ProfileAdapter adapter;
    ListView listView;

    Button editbtn;
    Context _c=getActivity();

    View profile;
    SelectUser cat;
    int clickCount = 0;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        profile = inflater.inflate(R.layout.profile_layout, container, false);

        selectUsers = new ArrayList<SelectUser>();
        editbtn = (Button) profile.findViewById(R.id.edit);
        listView = (ListView) profile.findViewById(R.id.profileList);

        label = new ArrayList<string>();
        label.add("Fname");
        label.add("Lname");
        label.add("Industry");
        label.add("Company");
        label.add("Address");

         values = new ArrayList<string>();
        values.add("abc");
        values.add("M");
        values.add("IT");
        values.add("XYZ");
        values.add("qwerty");

        for (int i = 0; i<= label.size(); i++) {
            SelectUser selectUser = new SelectUser();
            selectUser.setLabel(label.get(i));
            String val=values.get(i);
            selectUser.setValues(String.valueOf(values.get(i));
            selectUsers.add(selectUser);
        }
        adapter = new ProfileAdapter(getActivity(), selectUsers);
        listView.setAdapter(adapter);


//        on edit clickbutton enable or disable the edit text by calling actv() method
        editbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (clickCount == 0) {

                    editbtn.setText("Save");

                    adapter.actv(true);

                    adapter.notifyDataSetChanged();
                    listView.setAdapter(adapter);                 
                    clickCount = 1;

                } else if (clickCount == 1) {

                    editbtn.setText("Edit");

                    adapter.actv(false);

                    adapter.notifyDataSetChanged();
                    listView.setAdapter(adapter);
                    Toast.makeText(getActivity(), "click 1", Toast.LENGTH_LONG).show();
                    clickCount = 0;

                }

            }
        });
        return profile;
    }


    // Adopter class : handle list items
    class ProfileAdapter extends BaseAdapter {

        ViewHolder holder = new ViewHolder();

        public ArrayList&lt;SelectUser> groupItem;

        int flag=0;
        public ProfileAdapter(Context context, ArrayList&lt;SelectUser> group) {
            groupItem = group;

            _c = context;
        }

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

        @Override
        public SelectUser getItem(int i) {
            return groupItem.get(i);
        }

        @Override
        public long getItemId(int i) {
            return i;

        }

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


            View v = convertView;

            if (v == null) {
                LayoutInflater inflater = (LayoutInflater) _c.getSystemService
                        (Context.LAYOUT_INFLATER_SERVICE);
                v = inflater.inflate(R.layout.profile_listitems, parent, false);

                v.setTag(holder);
            } else {
                holder = (ViewHolder) v.getTag();
            }
            holder.mLable = (TextView) v.findViewById(R.id.label);
            holder.mValues = (EditText) v.findViewById(R.id.values);

            flag=position;
            cat = groupItem.get(flag);

            holder.mLable.setText(cat.getLabel());
            holder.mValues.setText(cat.getValues());


            holder.mValues.addTextChangedListener(new GenericTextWatcher(holder.mValues));



            if(clickCount==0)
            {holder.mValues.setEnabled(false);

                actv(false);
            }
            return v;
        }
        protected void actv(final boolean active) {
            holder.mValues.setEnabled(active);
            if (active) {
                holder.mValues.requestFocus();

            }
        }
    }

    class ViewHolder {

        TextView mLable;
        EditText mValues;
    }

    //Declaration
    private class GenericTextWatcher implements TextWatcher {

        private View view;

        private GenericTextWatcher(View view) {
            this.view = view;
        }

        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        }

        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        }

        public void afterTextChanged(Editable editable) {
            String text = editable.toString();
            switch (view.getId()) {
                case R.id.values:
                    cat.setValues(text);
                    break;

            }
        }
    }
}

Richard MacCutchan

Вы делаете это, написав код, чтобы взять значения и сохранить их в соответствии с вашими требованиями. Пожалуйста, отредактируйте свой вопрос и объясните, какие трудности вы испытываете с вашей реализацией.

[no name]

Пожалуйста, сделайте свой вопрос точечным, то есть спросите, что именно вам нужно.

1 Ответов

Рейтинг:
1

ridoy

Вы можете циклически перебирать элементы вашего ArrayAdapter и хранить их в своем SharedPreferences как:

SharedPreferences.Editor editor = prefs.edit();
// This will remove all entries of the specific SharedPreferences
editor.clear();
for (int i = 0; i < adapter.getCount(); ++i){
    // This assumes you only have the list items in the SharedPreferences.
    editor.putString(String.valueOf(i), adapter.getItem(i));
}
editor.commit();

Также видеть:
Android: Как сохранить список значений в SharedPreferences | Android Open Tutorials[^]