Java Android如何使用SharedReferences附加自定义listView
我想使用从API响应获取的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> {
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;
}
```