【问题标题】:Why does my ArrayList doesn't store my EditText entries but just display them为什么我的 ArrayList 不存储我的 EditText 条目而只是显示它们
【发布时间】:2015-02-03 14:50:18
【问题描述】:

我有一个FragmentStatePager,两个EditText 和一个自定义ListView。 用户可以进行两个输入并单击Button,它们将被添加到ListView,但它们不会存储在ListView 中。ListView 包含ArrayList

我希望EditText 的输入将存储在ArrayList 中。

有人能写出怎么做吗?


我的onCreateView

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        ViewGroup rootView = (ViewGroup) inflater.inflate(
                R.layout.swipeview, container, false);
        txtTitel = (TextView) rootView.findViewById(R.id.swipeviewtitle);


        // Capture position and set to the TextViews
        txtTitel.setText(titel[position]);


        // Locate the ImageView in viewpager_item.xml
        image = (ImageView) rootView.findViewById(R.id.swipeViewimage);
        // Capture position and set to the ImageView

        String title = titel[position];
        Integer imageRes = TITLE_IMAGES.get(title);
        if (imageRes == null) { // not found in map
            image.setImageResource(0);
        } else {
            image.setImageResource(imageRes);
        }


        final ListView listView = (ListView) rootView.findViewById(R.id.listViewswipeview);
        final EditText wdhedittext = (EditText) rootView.findViewById(R.id.editTextswipeView);
        final EditText kgedittext = (EditText) rootView.findViewById(R.id.editText2);
        final Button btnswipeview = (Button) rootView.findViewById(R.id.imagebuttonswipeview);





        adapter2 = new CustomListViewAdapter2(getActivity(),
                R.layout.swipeviewrowitem, rowItems);
        listView.setAdapter(adapter2);



        btnswipeview.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View View) {

                if (wdhedittext.getText().toString().matches("")) {
                    Toast toast = Toast.makeText(getActivity(),
                            "Bitte Wiederholungszahl angeben",
                            Toast.LENGTH_SHORT);
                    toast.show();
                } else if (kgedittext.getText().toString().matches("")) {
                    final rowitem2 item = new rowitem2(wdhedittext.getText().toString() + "wdh", kgedittext.getText().toString());

                    adapter2.add(item);
                    rowItems.add(item);

                } else {
                    final rowitem2 item = new rowitem2(wdhedittext.getText().toString() + "wdh", kgedittext.getText().toString() + "kg");
                    adapter2.add(item);
                    rowItems.add(item);

                /*String name = wdhedittext.getText().toString();
                int rowId = workoutDBAO2.addWorkout2(name);
                HashMap rowValsSets = new HashMap();
                rowValsSets.put("sets", name);
                rowValsSets.put("id", rowId);
                adapter3.add(rowValsSets);*/
                }


            }
        });


        rowItems = new ArrayList<rowitem2>();


        return rootView;
    }

CustomListViewAdapter2rowitem2

class CustomListViewAdapter2 extends ArrayAdapter<rowitem2> {


        private final ArrayList<rowitem2> items;
        Context context;

        public CustomListViewAdapter2(Context context, int resourceId,
                                      ArrayList<rowitem2> items) {
            super(context, resourceId, items);
            this.context = context;
            this.items=items;
        }



        public View getView(int position, View convertView, ViewGroup parent) {
            rowitem2 rowItem = items.get(position);

            LayoutInflater mInflater = (LayoutInflater) context
                    .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
                View view = mInflater.inflate(R.layout.swipeviewrowitem, null);
                TextView txtTitle = (TextView) view.findViewById(R.id.mainText2);
                TextView txtDesc = (TextView) view.findViewById(R.id.textView2);

            txtDesc.setText(rowItem.getDesc());
            txtTitle.setText(rowItem.getTitle());


            return view;
        }
        @Override
        public boolean areAllItemsEnabled() {
            return true;
        }

    }
}
class rowitem2 {

        private String edittexttitle;
        private String edittexttitle2;

        public rowitem2(String title, String desc) {
            this.edittexttitle = title;
            this.edittexttitle2 = desc;
        }

        public String getTitle() {
            return edittexttitle;
        }

        public String getDesc() {
            return edittexttitle2;
        }

        public void setTitle(String title) {
            this.edittexttitle = title;
        }

        @Override
        public String toString() {
            return edittexttitle + "\n" + edittexttitle2;
        }


    }

【问题讨论】:

  • 当列表发生变化时,您需要在适配器上调用notifyDataSetChanged()
  • 这不会改变任何事情。值仍然消失。
  • 请注意,Java 的约定是将class 名称以大写字母开头,例如private class MyClass{}

标签: android android-listview arraylist android-edittext


【解决方案1】:

添加项目后的 dapter2.notifyDataSetChanged() 将完成工作。

【讨论】:

    【解决方案2】:

    您不能在ArrayList 中保留任何数据。如果您想永久存储它们,您应该使用SQLite databaseSharedPreferences

    Here 是一个很好的例子,说明如何使用 SQLite 数据库解决您的问题。如果您计划存储和管理大量数据,这将非常有用。

    如果您不打算存储大量数据,使用SharedPreferences 将是一个不错的选择。例如:

    //Store a String in SharedPreferences 
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putString("your_key", your_string_variable);
    

    无论何时你想检索它(例如,onResumeonCreate

     // Restore preferences
     SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
     String your_string_variable = settings.getString("your_key", "default_value");
    

    更多关于 SharedPreferences 的信息可以在here找到。

    【讨论】:

    • 稍后我希望有一个Spinner,其中包含用户在ListView 中添加输入的日期(我认为每天不会超过6 个输入)。因此,当他每天添加输入时,应该有一个明确的ListView,但应该存储旧的,并且用户在选择Spinner 的一个日期时应该看到它们。那么你认为什么更好呢? SQLite databaseSharedPreferences ?
    • 在这种情况下,我建议查看SQLite database 示例。除了在数据库中存储数据之外,没有其他简单的方法可以存储数据。但是,将整个数据库概念解释为您问题的答案将过于宽泛。我建议您开始实施您的数据库,如果您有即将提出的问题,请将它们更具体地描述为新问题。 @nick04
    • 如果此答案有帮助,请将其标记为已接受的答案 :-) @nick04
    猜你喜欢
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 2016-06-12
    • 2014-05-07
    • 1970-01-01
    • 2020-04-07
    • 2011-03-07
    相关资源
    最近更新 更多