显示数据的有效方式

时间:2017-07-19 22:40:22

标签: java android

我正在创建一个包含片段的应用,用户可以使用按钮打开微调器并选择食物项目。然后食物项目将显示在列表中的按钮下。我尝试过创建文本视图并制作不可见的文本视图并稍后设置文本,但没有一个有效。我想知道是否有人知道更好的创造方式,我没有看到。

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>

2 个答案:

答案 0 :(得分:1)

这是你想要的吗?

image

然后,阅读我的代码。

  1. ChooseFoodFragment.java的代码及其布局文件:

    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
                }
            });
        }
    }
    
  2. fragment_choose_food.xml,只需删除除根视图和按钮之外的其他视图,然后添加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. ChooseFoodDialog.java的代码及其布局文件。

      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);
          }
      }
      
    2. dialog_choose_food.xml,这很简单。

      <?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. 运行程序,检查它。

答案 1 :(得分:0)

您应该使用ListViewRecyclerView来执行此类任务。查看官方Android文档中的示例:link