【问题标题】:Android how to append custom listView using SharedPreferencesAndroid如何使用SharedPreferences附加自定义listView
【发布时间】:2020-12-21 22:42:53
【问题描述】:

我想使用从 API 响应中获取的 SharedPreferences 更新我的 ListView... 我做了这样的事情:

  1. 首先是字符串[]:
String First[] = {"aa"};
String Second[] = {"aa"};
String Third[] = {"aa"};
String Four[] = {"aa"};
Integer Five[] = {1};
  1. 我想使用共享首选项更新此设置
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();

而且这段代码永远不会刷新列表视图......我完全不知道如何让它更自动......每次我在列表中添加其他东西时,例如。第一[] = {"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;
            }
    ```

【问题讨论】:

  • 我不确定这里发生了什么。你能分享你的适配器代码吗?
  • @Eselfar 我通过适配器代码编辑了我的问题 :) 请看一下

标签: java android string listview


【解决方案1】:

问题是您已经更新了活动中的值,但在适配器中您仍然有旧值,因此 notifyDataSetChanged 只能使用相同的值,您需要用新的替换适配器上的旧数组值数组值,例如,您可以在适配器类中创建一个简单的辅助方法来执行此操作

public void updateData(String[] firstArray) {
    this.first = firstArray;
    notifyDataSetChanged();
}

【讨论】:

  • 来自 SharedPreferences 的静态值很好但很难使用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多