Java Android如何使用SharedReferences附加自定义listView

Java Android如何使用SharedReferences附加自定义listView,java,android,string,listview,Java,Android,String,Listview,我想使用从API响应获取的SharedReferences更新我的ListView。。。 我是这样做的: 首先,我对字符串[]进行了初始化: 我想使用共享首选项更新此设置 这段代码永远不会刷新listview。。。我完全不知道如何使它更自动化。。每次当我在列表中添加其他内容时,例如First[]={“aaa”,“bbbb”};它工作正常 有人能抽出时间帮忙吗 适配器: class listDataAdapter extends ArrayAdapter<String> {

我想使用从API响应获取的SharedReferences更新我的ListView。。。 我是这样做的:

  • 首先,我对字符串[]进行了初始化:
  • 我想使用共享首选项更新此设置
  • 这段代码永远不会刷新listview。。。我完全不知道如何使它更自动化。。每次当我在列表中添加其他内容时,例如First[]={“aaa”,“bbbb”};它工作正常

    有人能抽出时间帮忙吗

    适配器:

    class listDataAdapter extends ArrayAdapter<String> {
    
                Context context;
                String rFirst[];
                String rSecond[];
                String rThird[];
                String rFour[];
                Integer Five[];
    
                listDataAdapter(Context c, String rFirst[], String rSecond[], String rThird[], String rFour[], Integer Five[]) {
                    super(c, R.layout.listview_row_orders, R.id.data_zal_text, rFirst);
                    this.context = c;
                    this.rFirst = rFirst;
                    this.rSecond = rSecond;
                    this.rThird = rThird;
                    this.rFour = rFour;
                    this.Five = Five;
                }
    
                @NonNull
                @Override
                public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
                    LayoutInflater layoutInflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    View row = layoutInflater.inflate(R.layout.listview_row_orders, parent, false);
                    TextView myFirst = row.findViewById(R.id.data_zal_text_data);
                    TextView mySecond = row.findViewById(R.id.data_rozl_text_data);
                    TextView myThird = row.findViewById(R.id.place_zal_text_data);
                    TextView myFour = row.findViewById(R.id.place_rozl_text_data);
                    ProgressBar myOrderProgress = row.findViewById(R.id.progress_order_status);
    
    
                    myFirst.setText(rFirst[position]);
                    mySecond.setText(rSecond[position]);
                    myThird.setText(rThird[position]);
                    myFour.setText(rFour[position]);
                    myOrderProgress.setProgress(Five[position]);
    
                    return row;
                }
        ```
    
    类listDataAdapter扩展了ArrayAdapter{
    语境;
    字符串rFirst[];
    字符串rSecond[];
    字符串rThird[];
    字符串rFour[];
    整数五[];
    listDataAdapter(上下文c,字符串rFirst[],字符串rSecond[],字符串rThird[],字符串rFour[],整数5[]){
    super(c,R.layout.listview_row_orders,R.id.data_zal_text,rffirst);
    this.context=c;
    this.rFirst=rFirst;
    this.rSecond=rSecond;
    this.rThird=rThird;
    this.rFour=rFour;
    这个,五等于五,;
    }
    @非空
    @凌驾
    公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级){
    LayoutInflater LayoutInflater=(LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
    视图行=LayoutFlater.inflate(R.layout.listview\u row\u orders,parent,false);
    TextView myFirst=row.findViewById(R.id.data_zal_text_data);
    TextView mySecond=row.findviewbyd(R.id.data\u rozl\u text\u data);
    TextView myThird=row.findviewbyd(R.id.place_zal_text_数据);
    TextView myFour=row.findviewbyd(R.id.place\u rozl\u text\u数据);
    ProgressBar myOrderProgress=row.findViewById(R.id.progress\u order\u status);
    myFirst.setText(rFirst[position]);
    mySecond.setText(rSecond[position]);
    myThird.setText(rThird[位置]);
    myFour.setText(rFour[位置]);
    myOrderProgress.setProgress(五个[位置]);
    返回行;
    }
    ```
    
    问题在于,您已经更新了活动中的值,但在适配器中仍然有旧值,因此notifyDataSetChanged将只使用相同的值,您需要用新的数组值替换适配器上的旧数组值,例如,您可以在适配器类中创建一个简单的帮助器方法来完成此操作

    public void updateData(字符串[]firstArray){
    this.first=firstArray;
    notifyDataSetChanged();
    }
    
    我不确定这里发生了什么。你能分享一下你的适配器代码吗?@Eselfar我用适配器代码编辑了我的问题:)请看一看这很好,但很难用静态值来自SharedReferences
    SharedPreferences settings;
    settings = getSharedPreferences("Number_List", Context.MODE_PRIVATE);
    
    String uFirst = settings.getString("uFirst", "NONE");
    String uSecond = settings.getString("uSecond", "NONE");
    String uThird = settings.getString("uThird", "NONE");
    String uFour = settings.getString("uFour", "NONE");
    int uFive= settings.getInt("uFive", 0);
    
    First = Arrays.copyOf(First, First.length + 1);
    Second= Arrays.copyOf(Second, Second.length + 1);
    Third= Arrays.copyOf(Third, Third.length + 1);
    Four= Arrays.copyOf(Four, Four.length + 1);
    Five= Arrays.copyOf(Five, Five.length + 1);
    
    First[First.length -1] = uFirst;
    Second[Second.length -1] = uSecond;
    Third[Third.length -1] = uThird;
    Four[Four.length -1] = uFour;
    Five[Five.length -1] = uFive;
    
    adapter.notifyDataSetChanged();
    
    class listDataAdapter extends ArrayAdapter<String> {
    
                Context context;
                String rFirst[];
                String rSecond[];
                String rThird[];
                String rFour[];
                Integer Five[];
    
                listDataAdapter(Context c, String rFirst[], String rSecond[], String rThird[], String rFour[], Integer Five[]) {
                    super(c, R.layout.listview_row_orders, R.id.data_zal_text, rFirst);
                    this.context = c;
                    this.rFirst = rFirst;
                    this.rSecond = rSecond;
                    this.rThird = rThird;
                    this.rFour = rFour;
                    this.Five = Five;
                }
    
                @NonNull
                @Override
                public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
                    LayoutInflater layoutInflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    View row = layoutInflater.inflate(R.layout.listview_row_orders, parent, false);
                    TextView myFirst = row.findViewById(R.id.data_zal_text_data);
                    TextView mySecond = row.findViewById(R.id.data_rozl_text_data);
                    TextView myThird = row.findViewById(R.id.place_zal_text_data);
                    TextView myFour = row.findViewById(R.id.place_rozl_text_data);
                    ProgressBar myOrderProgress = row.findViewById(R.id.progress_order_status);
    
    
                    myFirst.setText(rFirst[position]);
                    mySecond.setText(rSecond[position]);
                    myThird.setText(rThird[position]);
                    myFour.setText(rFour[position]);
                    myOrderProgress.setProgress(Five[position]);
    
                    return row;
                }
        ```