【问题标题】:Setting ListView设置列表视图
【发布时间】:2020-03-06 19:59:11
【问题描述】:

我在使用列表视图和微调器时遇到问题。我正在使用列表视图来显示项目,并使用微调器在类别之间进行过滤,并使用按钮来刷新视图。我的问题是,在选择不同的类别后,它不会更改 listView 并将微调器恢复为原始类别。我曾尝试使用.clear()onClickListener(),但我的问题仍然存在。有没有办法让微调器在单击按钮后更改 listView 中的项目?

import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Spinner;
import androidx.fragment.app.Fragment;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static android.content.ContentValues.TAG;

public class MenuFragment extends Fragment {

   private ListView menuList;
   private Spinner menuSpinner;
   private Button buttonRefresh;
   //private ArrayList<Menu> menuArrayList ;

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       super.onCreateView(inflater, container, savedInstanceState);
       View rootView = inflater.inflate(R.layout.fragment_menu, container, false);
       Log.i(TAG, "onCreateView of MenuFragment has loaded");

       //menuApps=(TextView)rootView.findViewById(R.id.menuApps);
       //menuTitle=(TextView)rootView.findViewById(R.id.menuTitle);
       menuList=(ListView)rootView.findViewById(R.id.menuList);
       menuSpinner=(Spinner)rootView.findViewById(R.id.menuSpinner);
       buttonRefresh=(Button)rootView.findViewById(R.id.buttonRefresh);

       //menuSpinner.setOnItemClickListener(new View.OnItemClickListener());
       //menuViewingMethod();

               buttonRefresh.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               menuViewingMethod();
               Log.i(TAG,"Refresh has been clicked");
           }
       });

       return rootView;
   }


  public ListView menuViewingMethod(){
      List<String> list=new ArrayList<>();
      list.add("Appetizers");
      list.add("Salads");
      list.add("Soups");
      list.add("Side Items");
      list.add("Entrees");
      list.add("Desserts");

      //sets up the spinner
      ArrayAdapter<String>dataAdapter= new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item,list);
      dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
      menuSpinner.setAdapter(dataAdapter);


      String input= menuSpinner.getSelectedItem().toString();
      Log.d(TAG,input);
      if (input=="Appetizers"){
          //menuList.clear();
          /*menuList.setAdapter(arrayAdapter);
          menuArrayList.add("Gerst Sampler – $12.99");
          menuArrayList.add("Fried Oyster Basket – $11.99");
          menuArrayList.add("Gerst Ham Rolls - $11.99");
          menuArrayList.add("Bavarian Kraut Balls – $8.99");
          Log.i(TAG,"Spinner item Appetizers has been selected");*/
          String[] apps = new String[]{"Gerst Sampler – $12.99",
              "Fried Oyster Basket – $11.99",
              "Gerst Ham Rolls - $11.99",
              "Bavarian Kraut Balls – $8.99"};
           ArrayList<String> menuArrayList= new ArrayList<String>(Arrays.asList(apps));

           ArrayAdapter<String>arrayAdapter= new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1,menuArrayList);

          menuList.setAdapter(arrayAdapter);

      }
      //https://android--code.blogspot.com/2015/08/android-listview-add-items.html

      else if (input=="Salads"){
          /*menuArrayList.clear();
          menuList.setAdapter(arrayAdapter);
          menuArrayList.add("Salad1");*/


          String[] salads = new String[]{"Salad1", "Salad 2", "Salad 3"};

           List<String> menuArrayList= new ArrayList<String>(Arrays.asList(salads));

           ArrayAdapter<String>arrayAdapter= new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_2,menuArrayList);

          menuList.setAdapter(arrayAdapter);
          arrayAdapter.notifyDataSetChanged();
      }

      else if(input=="Soups"){
          /*menuList.setAdapter(arrayAdapter);
          menuArrayList.clear();*/
          String[] soups = new String[] {"Soup 1", "Soup 2", "Soup 3"};

           List<String> menuArrayList= new ArrayList<String>(Arrays.asList(soups));

           ArrayAdapter<String>arrayAdapter= new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1,menuArrayList);

          menuArrayList.clear();

          menuList.setAdapter(arrayAdapter);
          arrayAdapter.notifyDataSetChanged();
      }



      String[] apps = new String[]{"Gerst Sampler – $12.99",
              "Fried Oyster Basket – $11.99",
              "Gerst Ham Rolls - $11.99",
              "Bavarian Kraut Balls – $8.99"};
       List<String> menuArrayList= new ArrayList<String>(Arrays.asList(apps));

       ArrayAdapter<String>arrayAdapter= new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1,menuArrayList);

      menuList.setAdapter(arrayAdapter);



     // menuSpinner.setOnTouchListener((View.OnTouchListener) this);

       arrayAdapter.notifyDataSetChanged();

      return menuList;
  }

}

【问题讨论】:

  • 在我看来,每次调用 menuViewingMethod() 时,都会在第一个 if 语句之前重置右上角的 menuSpinner 的适配器。在同一方法中的 if/else 逻辑结束时,您将 menuList 重置为其默认状态。将“设置”代码移出此方法并移出刷新 btn 单击侦听器,因为您希望该代码成为列表和菜单的默认状态。

标签: java android listview


【解决方案1】:

建议两件事:

  1. 将微调器设置从“menuViewingMethod()”重新定位到“onCreateView()”。这可能是每次触发“menuViewingMethod()”时微调器重置为 0 的原因。

  2. 在 'menuViewingMethod()' 中,将 'menuArrayList' 和 'arrayAdapter' 类设为变量,然后用新内容重新加载列表。

    String[] 沙拉 = new String[]{"沙拉 1", "沙拉 2", "沙拉 3"}; menuArrayList.clear(); menuArrayList.addAll(Arrays.asList(沙拉)); arrayAdapter.notifyDataSetChanged();

【讨论】:

    猜你喜欢
    • 2010-09-23
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 2011-07-23
    • 1970-01-01
    相关资源
    最近更新 更多