RecylerView y "amor y odio" multiproceso, ¿cómo hacer que su RecyclerView obtenga el valor pasado por el marco ssm?


Con respecto a este problema, cuando uso el framework ssm 想在android端取到ssm框架传过来的数据,然后把数据传给RecylerView显示出来 . Luego me encontré con muchas preguntas. Recientemente le pregunté a la maestra y le dije que debía usarse runOnUiThread方法 . De hecho, la maestra dijo antes, pero usé menos, así que lo olvidé. No digas tonterías, pasa al tema.

El primer paso: el uso de RecyclerView.

No diré mucho sobre esto. En general, puede querer implementar RecylerView y la transferencia de valor de subprocesos múltiples. Tengo un poco de comprensión del uso de RecyclerView.
Si quieres consolidar el uso de RecyclerView, puedes echar un vistazo a este blog de nuestro profesor, que es muy detallado y explica el uso más completo de Android RecyclerView .

El segundo paso: el papel del método runOnUiThread.

Explicación general : en el proceso de desarrollo de Android, el hilo principal completa principalmente el dibujo de la interfaz de usuario y responde a las operaciones del usuario. Por defecto, la mayor parte de nuestro código se ejecuta en el hilo principal, por lo que siempre debemos considerar el hilo principal Sucediendo. Todos sabemos que necesitamos iniciar un subproceso secundario para completar una operación que requiere mucho tiempo y evitar que el subproceso principal afecte la experiencia del usuario, e incluso ANR. Sin embargo 子线程执行完要更新UI的时候,我们又必须回到主线程来更新, el método comúnmente utilizado para lograr esta función es ejecutar el método de Actividad runOnUiThread ().

Creo que principalmente significa usar los datos del hilo secundario para actualizar los datos del hilo principal.

El tercer paso: cómo obtener el valor de multiproceso.

el código se muestra a continuación:

package com.example.reclycleview_thread;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    
    
    RecyclerView mRecyclerView;
    MyAdapter mMyAdapter ;
    List<String> list=new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRecyclerView=findViewById(R.id.recycleView);
        Data();
    }

    class MyAdapter extends RecyclerView.Adapter<MyViewHoder> {
    
    
        @NonNull
        @Override
        public MyViewHoder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    
    
            View view = View.inflate(getApplicationContext(), R.layout.layout_thread, null);
            MyViewHoder myViewHoder = new MyViewHoder(view);
            return myViewHoder;
        }

        @Override
        public void onBindViewHolder(@NonNull MyViewHoder holder, int position) {
    
    
            holder.textView.setText(list.get(position));
        }

        @Override
        public int getItemCount() {
    
    
            return list.size();
        }
    }

    class MyViewHoder extends RecyclerView.ViewHolder {
    
    
        TextView textView;

        public MyViewHoder(@NonNull View itemView) {
    
    
            super(itemView);
            textView=itemView.findViewById(R.id.textView);
        }
    }

    public void Data(){
    
    
        new Thread(new Runnable() {
    
    
            @Override
            public void run() {
    
    
                List<String> date=new ArrayList<>();
                for(int i=0;i<100;i++){
    
    
                    date.add(String.valueOf(i));
                }
                try {
    
    
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
    
    
                    e.printStackTrace();
                }
                runOnUiThread(new Runnable() {
    
    
                    @Override
                    public void run() {
    
    
                        list = date;
                        mMyAdapter = new MyAdapter();
                        mRecyclerView.setAdapter(mMyAdapter);
                        LinearLayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
                        mRecyclerView.setLayoutManager(layoutManager);
                    }
                });
            }
        }).start();
    }

}

Análisis de código:
De acuerdo con todos los códigos anteriores, el efecto es más claro, porque estoy aquí para simular el paso de valor del marco ssm, porque generalmente usamos ssm框架进行增删改查等操作分为三种情况:
1 只从获取ssm框架传过来的数据.. Por ejemplo: consultar todos los datos
2 你传一个数据给ssm框架,然后ssm会传相应的数据给你.. Por ejemplo: función de consulta.
3 你只传数据给ssm框架.. Por ejemplo: Agregar función.
Por lo general, estos métodos de adquisición tienen retrasos y no adquieren datos de inmediato, por lo que utilizoMétodo Threa.sleep () para la operación de simulación de retardo
Inserte la descripción de la imagen aquí

¿Por qué poner el método en el círculo rojo en la parte inferior de la figura de arriba en runOnUiThread? Déjame mostrarte, si 没有把上图方法放到runOnUiThread的方法, después de todo 实践出真知.

Forma correcta

La forma correcta es la que se muestra a continuación MyAdapter,LinerLayoutManager方法放到runOnUiThread方法种的形式,把它们放到主线程中的形式.

Inserte la descripción de la imagen aquí
Luego miramos el efecto,Dos segundos después, RecyclerView obtuvo los datos simulados. Debido a que el emulador de mi teléfono móvil se ha roto recientemente, solo puedo usar este dispositivo para hacer una demostración, pero no sé cómo tomar un gif con este dispositivo, por lo que solo puedo subir una foto. También puedes probarlo tú mismo.
Inserte la descripción de la imagen aquí

Formulario erroneo

La forma incorrecta 不把MyAdapter,LinerLayoutManager方法放到runOnUiThread方法种的形式. como muestra la imagen.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Al observar el efecto, podemos ver que no se reciben datos,Esperé casi 10 segundos y todavía no hay datos., como muestra la imagen:

Inserte la descripción de la imagen aquí

,
如果你没怎么用过ssm框架传值给RecyclerView,你可能不会这么感到深受,但是这个问题上次确实困扰了一天,把这个经验分享给大家,希望能帮到大家. Porque también soy un estudiante que todavía está estudiando, si hay errores o problemas que quiero plantear, los corregiré.

Supongo que te gusta

Origin blog.csdn.net/qq_45137584/article/details/111718486
Recomendado
Clasificación