Java Android:更改屏幕方向时更新dinamically ListView不';行不通
我正在Android Studio中创建一个应用程序,我发现了一个错误,我不知道如何解决它 屏幕上有一个按钮,每次单击它,都会执行一个异步任务。AsyncTask完成处理后,获得的数据应显示在屏幕的ListView中,因此ListView将动态更新。好的,一切都很好,直到你改变屏幕的方向,当,我不知道为什么,如果你再次点击按钮获取新数据,它不会出现在ListView上。您必须再次更改方向,并在ListView中加载从上一屏幕保存的arraylist。所以,我不明白为什么在改变屏幕方向之前起作用的东西在之后就不起作用了 下面是这个类的代码,我正在保存ListView(onSaveInstanceState)的内容,以便在更改方向屏幕时恢复它,我认为它工作正常。可能错误在processFinish方法中,该方法在AsyncTask进程完成时执行,字符串参数是我要添加到ListView的参数;但是,在更改方向屏幕之前,此方法非常有效。我的另一个选择是错误与指针有关Java Android:更改屏幕方向时更新dinamically ListView不';行不通,java,android-studio,listview,Java,Android Studio,Listview,我正在Android Studio中创建一个应用程序,我发现了一个错误,我不知道如何解决它 屏幕上有一个按钮,每次单击它,都会执行一个异步任务。AsyncTask完成处理后,获得的数据应显示在屏幕的ListView中,因此ListView将动态更新。好的,一切都很好,直到你改变屏幕的方向,当,我不知道为什么,如果你再次点击按钮获取新数据,它不会出现在ListView上。您必须再次更改方向,并在ListView中加载从上一屏幕保存的arraylist。所以,我不明白为什么在改变屏幕方向之前起作用的
public class CameraF extends Fragment implements AsyncResponse, View.OnClickListener {
Button takeSnapshotButton;
Socket socket;
ArrayList<String> colorSensorValues;
ListView listViewColorSensorData;
ArrayAdapter<String> adapter;
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_camera, container, false);
takeSnapshotButton = (Button) root.findViewById(R.id.takeSnapshotButton);
listViewColorSensorData = (ListView) root.findViewById(R.id.listViewColorSensorData);
//Set button click listener
takeSnapshotButton.setOnClickListener(this);
colorSensorValues = new ArrayList<>();
adapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, colorSensorValues);
listViewColorSensorData.setAdapter(adapter);
//If we have a saved state then we can restore it now
if(savedInstanceState != null){
colorSensorValues = savedInstanceState.getStringArrayList("colorSensorValues-key");
adapter.addAll(colorSensorValues);
adapter.notifyDataSetChanged();
}
else{
colorSensorValues.add(0, " CLEAR | RED | GREEN | BLUE");
}
//Get socket
socket = SocketHandler.getSocket();
return root;
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putStringArrayList("colorSensorValues-key", colorSensorValues);
}
@Override
public void onClick(View v) {
MessageSender messageSender = new MessageSender();
//this to set delegate/listener back to this class
messageSender.delegate = this;
//Add 0 in order to send always the same size of buffer
SendData sendData = new SendData(socket, "T00000000000000"); //T0000000
messageSender.execute(sendData);
}
@Override
public void processFinish(String string) {
colorSensorValues.add(0, string);
adapter.notifyDataSetChanged();
//Enable button again
takeSnapshotButton.setEnabled(true);
}
}
公共类CameraF extends片段实现异步响应,View.OnClickListener{
按钮按钮;
插座;
ArrayList颜色传感器值;
ListView listViewColorSensorData;
阵列适配器;
创建视图时的公共视图(@NonNull LayoutInflater inflater、ViewGroup容器、Bundle savedInstanceState){
视图根=充气机。充气(R.layout.fragment\u摄像头,容器,错误);
takeSnapshotButton=(Button)root.findViewById(R.id.takeSnapshotButton);
listViewColorSensorData=(ListView)root.findViewById(R.id.listViewColorSensorData);
//设置按钮单击侦听器
takeSnapshotButton.setOnClickListener(此);
colorSensorValues=新的ArrayList();
adapter=newarrayadapter(getContext(),android.R.layout.simple\u list\u item\u 1,colorSensorValues);
listViewColorSensorData.setAdapter(适配器);
//如果我们有一个保存的状态,那么我们现在就可以恢复它
如果(savedInstanceState!=null){
colorSensorValues=savedInstanceState.getStringArrayList(“colorSensorValues键”);
adapter.addAll(颜色传感器值);
adapter.notifyDataSetChanged();
}
否则{
colorSensorValues.添加(0,“清晰|红色|绿色|蓝色”);
}
//接插座
socket=SocketHandler.getSocket();
返回根;
}
@凌驾
SAVEInstanceState上的公共无效(@NonNull Bundle outState){
super.onSaveInstanceState(超出状态);
putStringArrayList(“colorSensorValues键”,colorSensorValues);
}
@凌驾
公共void onClick(视图v){
MessageSender MessageSender=新建MessageSender();
//此选项用于将委托/侦听器设置回此类
messageSender.delegate=这个;
//添加0以便始终发送相同大小的缓冲区
SendData SendData=新的SendData(套接字,“T00000000000000”);//T0000000
messageSender.execute(sendData);
}
@凌驾
公共void processFinish(字符串){
colorSensorValues.add(0,字符串);
adapter.notifyDataSetChanged();
//再次启用按钮
takeSnapshotButton.setEnabled(true);
}
}
我已经搜索了相关信息,并尝试了几种方法来处理此问题,但没有找到解决方案。也许任何人都能为我找到解决办法