Keith
Keith

Reputation: 39

Efficient way to display data

I am creating an app that has a fragment where a user can open a spinner using a button and select a food item. The food item will then be displayed under the button in a list. I have tried creating textviews and making invisible textviews and setting the text later, but none have worked. I was wondering if anyone knew of a better way of creating this that I'm not seeing.

screenshot

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.lastineindustries.ingredismartv2.Kitchen">

<!-- TODO: Update blank fragment layout -->

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <Button
        android:text="Add An Ingredient"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/add"
        android:textSize="30sp"
        android:layout_gravity="center" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <LinearLayout
            android:layout_width="320dp"
            android:layout_height="match_parent"
            android:id="@+id/main"
            android:orientation="vertical">


        </LinearLayout>

        <LinearLayout
            android:layout_width="60dp"
            android:layout_height="match_parent"
            android:id="@+id/valueButton"
            android:orientation="vertical">

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

Upvotes: 0

Views: 50

Answers (2)

Relish Wang
Relish Wang

Reputation: 385

Is this what you want?

image

Then, read my code.

  1. code of ChooseFoodFragment.java and its layout file:

    public class ChooseFoodFragment extends Fragment{
    
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.fragment_choose_food, container, false);
            initViews(v);
            return v;
        }
    
        private Button btn_add;
        private ListView listView;
        private List<String> mData = new ArrayList<>();
        private ArrayAdapter<String> mAdapter;
    
    
        private void initViews(View v) {
            listView = v.findViewById(R.id.list);
            mAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, mData);
            listView.setAdapter(mAdapter);
    
            btn_add = v.findViewById(R.id.add);
            btn_add.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    ChooseFoodDialog dialog = new ChooseFoodDialog();
                    dialog.setOnSelectedListener(new ChooseFoodDialog.OnSelectedListener() {
                        @Override
                        public void onSelected(String name) {
                            mData.add(name);
                            mAdapter.notifyDataSetChanged();// update the list of selected food
                        }
                    });
                    dialog.show(getFragmentManager(), "");//show the spinner items to select
                }
            });
        }
    }
    

fragment_choose_food.xml,just remove other views except the root view and the button, then add a ListView.

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.lastineindustries.ingredismartv2.Kitchen">

    <!-- TODO: Update blank fragment layout -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <Button
            android:id="@+id/add"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Add An Ingredient"
            android:textSize="30sp" />

        <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="16dp" />

    </LinearLayout>
</FrameLayout>
  1. the code of ChooseFoodDialog.java and its layout file.

    public class ChooseFoodDialog extends DialogFragment {
    
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View v = LayoutInflater.from(getContext()).inflate(R.layout.dialog_choose_food, container, false);
            initViews(v);
            return v;
        }
    
        private ListView lv;
        private List<String> mData = new ArrayList<>();
    
        private void initViews(View v) {
            // prepare some temp data
            for (int i = 0; i < 10; i++) {
                mData.add("Ingredients_" + i);
            }
    
            lv = v.findViewById(R.id.lv_ingredients);
            ArrayAdapter<String> adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1, mData);
            lv.setAdapter(adapter);
            lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    String ingredient = mData.get(i);
                    if (mListener != null) {
                        mListener.onSelected(ingredient);// when the item of food is selected
                    }
                    dismiss();
                }
            });
    
        }
    
        private OnSelectedListener mListener;
    
        public void setOnSelectedListener(OnSelectedListener listener) {
            mListener = listener;
        }
    
    
        interface OnSelectedListener {
            void onSelected(String name);
        }
    }
    

dialog_choose_food.xml,that's simple.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/lv_ingredients"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>
  1. run the program, check it.

Upvotes: 1

dniHze
dniHze

Reputation: 2232

You should use ListView or RecyclerView for such tasks. Check out example from official Android documentation: link.

Upvotes: 0

Related Questions