0

I'm writing an android application with java.

I'm trying to have a list of items and to be able to remove or add items to that list.

in my fragment xml I have a ListView

           <ListView android:id="@+id/ingredients_listview"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_span="2">

            </ListView>

my fragment's code:

Button galleryButton,cameraButton, addIngredientButton, drinkCompleteButton;
    EditText ingredientEditText;
    ListView ingredientsListView;
ArrayList<String> listItems=new ArrayList<String>();

    ArrayAdapter<String> adapter;

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_add_dink, container, false);
           ingredientEditText = (EditText)  rootView.findViewById(R.id.ingredients_edit);

        ingredientsListView = (ListView) rootView.findViewById(R.id.ingredients_listview);
        adapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,listItems);
    ingredientsListView.setAdapter(adapter);
   addIngredientButton.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) {
                Toast.makeText(getActivity().getApplicationContext(),"here",Toast.LENGTH_LONG).show();
                final String ingredient = ingredientEditText.getText().toString().trim();
                if (ingredient.length() == 0) {
                    Toast.makeText(getActivity().getApplicationContext(),"ingredient is empty",Toast.LENGTH_LONG).show();
                } else {
                    listItems.add(ingredient);
                    adapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,listItems);
                    ingredientsListView.setAdapter(adapter);

                }
            }
        });

so.. whenever the user click on addIngredientButton, if the lengtn of the text is greater then zero, I add it to the listItems list, then I re-create the adapter and set the new adapter to the ingredientsListView.

first of all.. is this the way to go? do I really need to re-create the adapter each time I create a new element ?

second.. i always see only the first element in the list! so if i add the first element I see that element. if I add another element I only see the first element.

any ideas ?

update

changes that I made

        addIngredientButton.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) {
                Toast.makeText(getActivity().getApplicationContext(),"here",Toast.LENGTH_LONG).show();
                final String ingredient = ingredientEditText.getText().toString().trim();
                if (TextUtils.isEmpty(ingredient)) {
                    Toast.makeText(getActivity().getApplicationContext(),"ingredient is empty",Toast.LENGTH_LONG).show();
                } else {
                    adapter.add(ingredient);

                }
            }
        });

ok that solves my first problem that I don't need to re-create the adapter. but still I only see the first element in the list.

update

my add drink fragment that includes the ListView 'ingredients_listview'

 <ScrollView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/scrollView"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentStart="true"
    android:layout_marginBottom="50dp"
    >
    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:stretchColumns="1">

        <TableRow>
            <TextView android:id="@+id/drink_brand_textview"
               android:labelFor="@+id/drink_brand_edit"
                android:text="@string/drink_brand"
                />
            <EditText android:id="@+id/drink_brand_edit"
                android:inputType="textAutoComplete" />
        </TableRow>

        <TableRow>
            <TextView android:id="@+id/drink_type_textview"
                android:labelFor="@+id/drink_type_edit"
                android:text="@string/drink_type"
                />
            <EditText android:id="@+id/drink_type_edit"
                android:inputType="textAutoComplete" />
        </TableRow>
        <TableRow>
            <TextView android:id="@+id/drink_company_textview"
                android:labelFor="@+id/drink_company_edit"
                android:text="@string/drink_company"
                />
            <EditText android:id="@+id/drink_company_edit"
                android:inputType="textAutoComplete" />
        </TableRow>

        <TableRow>
            <TextView android:id="@+id/drink_flavor_type_textview"
                android:labelFor="@+id/drink_flavor_type_edit"
                android:text="@string/drink_flavor_type"
                />
           <EditText android:id="@+id/drink_flavor_type_edit"
                android:inputType="textAutoComplete" />
        </TableRow>
        <TableRow>
            <TextView android:id="@+id/liquid_color_textview"
                android:labelFor="@+id/liquid_color_edit"
                android:text="@string/liquid_color"
                />
            <EditText android:id="@+id/liquid_color_edit"
                android:inputType="textAutoComplete" />
        </TableRow>

        <TableRow>
            <TextView android:id="@+id/liquid_color_is_transparent_textview"
                android:text="@string/liquid_color_is_transparent"
                />
            <RadioGroup>
                <RadioButton
                    android:id="@+id/is_transparent_yes_radio"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/yes"
                    android:checked="true"/>

                <RadioButton
                    android:id="@+id/is_transparent_no_radio"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/no"/>
            </RadioGroup>
        </TableRow>
        <TableRow>
            <TextView android:id="@+id/calories_for_100g_textview"
                android:labelFor="@+id/calories_for_100g_edit"
                android:text="@string/calories_for_100g"
                />
            <EditText android:id="@+id/calories_for_100g_edit"
                android:inputType="number" />
        </TableRow>
        <TableRow>
            <TextView android:id="@+id/alcohol_volume_textview"
                android:labelFor="@+id/alcohol_volume_edit"
                android:text="@string/alcohol_volume"
                />
            <EditText android:id="@+id/alcohol_volume_edit"
                android:inputType="number" />
        </TableRow>
        <TableRow>
            <TextView android:id="@+id/drink_image_textview"
                android:text="@string/drink_image"/>
            <ImageView android:id="@+id/drink_imageview"/>
        </TableRow>
        <TableRow>
            <Button android:id="@+id/add_drink_image_from_gallery_button"
                android:text="@string/gallery"
                />
            <Button android:id="@+id/add_drink_image_from_camera_button"
                android:text="@string/camera"
                />

        </TableRow>
        <TableRow>
            <TextView android:id="@+id/ingredients_textview"
                android:text="@string/ingredients"/>
            <EditText android:id="@+id/ingredients_edit"/>
        </TableRow>
        <TableRow>
            <Button android:id="@+id/add_ingredient_button"
                android:text="@string/add_ingredient"/>
        </TableRow>
        <TableRow>
            <ListView android:id="@+id/ingredients_listview"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_span="2">

            </ListView>
        </TableRow>
        <TableRow>
            <Button android:id="@+id/drink_complete_button"
                android:text="@string/complete"/>
        </TableRow>
        </TableLayout>

    </ScrollView>


</RelativeLayout>

2 Answers 2

2

ArrayAdapter has the add method that does what you need, without the needs to recreate the adapter every time you add something. Here you can find the documentation

addIngredientButton.setOnClickListener(new Button.OnClickListener() {

        @Override
        public void onClick(View v) {
            Toast.makeText(getActivity().getApplicationContext(),"here",Toast.LENGTH_LONG).show();
            final String ingredient = ingredientEditText.getText().toString().trim();
            if (!TextUtils.isEmpty(ingredient)) {
                    adapter.add(ingredient);
             }

           }
        }
    });
Sign up to request clarification or add additional context in comments.

7 Comments

i still only see the first element that I added
when I try the ingredients list i can see the rest. so for some reason wrap_content wraps only the first line.
I am not sure what you mean. Can you rephrase?
i'll try :) it seems that the height of the ListView element is one line. that's why I only saw the first line. but I am able to go and scroll with my finger and see the rest of the elements, element after element. so i need to figure how to resize the ListView element based on it's content.
Post the whole layout . I'll take a look later
|
0

Call add() on the ArrayAdapter and call notifyDataSetChanged() on the ArrayAdapter.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.