【问题标题】:How to update listview inside fragment not in oncreateview method如何更新片段内的列表视图不在oncreateview方法中
【发布时间】:2019-09-12 10:34:39
【问题描述】:

我有一个方法 «Start()» 读取文档并将数据写入 listview

此方法在 ViewPager

中使用的片段中

我需要这个方法才能显示列表视图,因为我需要在其他无法显示 listview

的操作中调用此方法

片段

public class classWednesday extends Fragment {
    private ListView lvMain;
    private List<Fragment> list = new ArrayList<>();
    ArrayList<HelpAdapter> products = new ArrayList<>();
    Integer num = 0;
    private SharedPreferences settings;
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser && (getActivity()!=null)) {
            SharedPreferences.Editor editor = settings.edit();
            editor.putString("Day","Wednesday.txt" );
            editor.apply();
        }
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        ViewGroup viewGroup = (ViewGroup) inflater.inflate(R.layout.wednesday, container,false);
        Start();
        lvMain = viewGroup.findViewById(R.id.lvWednesday);
        Adapter adapter = new Adapter(getActivity(),products);
        lvMain.setAdapter(adapter);
        Toast.makeText(getActivity(),"dsaasdasasdhasuidgasiuygausgdgydgas",Toast.LENGTH_LONG).show();
        settings = getActivity().getSharedPreferences("Settings", MODE_PRIVATE);
        if (settings.contains("Wednesday")) {
            ImageButton imageButton = viewGroup.findViewById(R.id.imageButtonWednesday);
            if (settings.getBoolean("Wednesday", true))
                imageButton.setImageResource(R.drawable.on);
            else
                imageButton.setImageResource(R.drawable.off);

        }
        return viewGroup;
    }
    public void Start() {
        products.clear();
        try {
            FileInputStream read = getActivity().openFileInput("Wednesday.txt");
            InputStreamReader reader = new InputStreamReader(read);
            BufferedReader bufferedReader = new BufferedReader(reader);
            String temp_read;
            while ((temp_read = bufferedReader.readLine()) != null) {
                num ++;
                products.add(new HelpAdapter(num + ")", temp_read));

            }
            bufferedReader.close();
            reader.close();
            read.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NullPointerException ignore) {    
        }
        num = 0;    
    }
}

附:如果添加

lvMain = getActivity().findViewById(R.id.lvWednesday);
Adapter adapter = new Adapter(getActivity(),products);         
lvMain.setAdapter(adapter);

Start()方法中

那么,

lvMain.setAdapter(适配器);

返回 null

【问题讨论】:

  • 哪一个返回null?
  • listview "lvMain" 当您在此处添加新记录 lvMain = getActivity().findViewById(R.id.lvWednesday); 它变为空。应用加载时返回 null lvMain.setAdapter(adapter);

标签: java android listview adapter


【解决方案1】:

使用视图而不是视图组

View viewGroup = inflater.inflate(R.layout.wednesday, container,false);

【讨论】:

  • 对不起,这对我有什么帮助?
  • onCreateView() 当片段第一次绘制其用户界面时,系统调用它。要为您的 Fragment 绘制 UI,您必须从此方法返回一个 View,它是 Fragment 布局的根。如果片段不提供 UI,您可以返回 null。请参考link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
相关资源
最近更新 更多