回收者视图仅显示一项而不是三项

时间:2020-07-30 23:49:57

标签: android

我需要一些帮助,我正在用php和android开发一个应用程序。我正在使用回收站视图,但是我遇到了问题,因为我的清单有3个项目,并且只显示一个项目,您能帮我吗?我将添加适配器和主适配器。

AdapterLocalPersonalizado

public class AdapterLocalPersonalizado extends RecyclerView.Adapter<AdapterLocalPersonalizado.MeuViewHolder> {

    Context ctx;
    List<Local> listaLocal;

    connection con = new connection();

    public AdapterLocalPersonalizado(List<Local> locais,Context ctx1) {
        this.ctx = ctx1;
        this.listaLocal = locais;
    }

    public class MeuViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

        TextView nome,categoria,endereco,valor;
        @SuppressLint("WrongViewCast")
        public MeuViewHolder(@NonNull View view) {
            super(view);

            nome = (TextView) view.findViewById(R.id.namec);
            categoria = (TextView) view.findViewById(R.id.categoria);
            valor = (TextView) view.findViewById(R.id.valor);
            endereco = (TextView) view.findViewById(R.id.ende);

            view.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            int position = getAdapterPosition();

            Local objSelecionado = listaLocal.get(position);

            if(position != RecyclerView.NO_POSITION){


                Intent intent = new Intent(ctx.getApplicationContext(), tela_lista_local.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                Bundle bundle = new Bundle();
                bundle.putInt("ID",objSelecionado.getId());

                ctx.startActivity(intent);
            }
        }
    }

    @NonNull
    @Override
    public MeuViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        Local local = listaLocal.get(i);
        
        Context context = viewGroup.getContext();
        LayoutInflater inflater = LayoutInflater.from(context);

        View linhaView = inflater.inflate(R.layout.activity_tela_lista_local_personalizada, viewGroup, false);

        MeuViewHolder viewHolder = new MeuViewHolder(linhaView);
        

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull AdapterLocalPersonalizado.MeuViewHolder meuViewHolder, int i) {
        Local local = listaLocal.get(i);
            TextView nome = meuViewHolder.nome;
       nome.setText(local.getNome());
        }

    

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

}

tela_lista_local(主要)

public class tela_lista_local extends AppCompatActivity {


    AdapterLocalPersonalizado adapterLocalPersonalizado;
    List<Local> localList;
    Local local;
    String endereco,categoria,token;


    connection con = new connection();
    ListarLocalAsyncTask listarLocaisAsyncTask;
    RecyclerView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tela_lista_local);
        token = "tcc";
        Intent it = getIntent();
         categoria = it.getStringExtra("categoria");
         endereco = it.getStringExtra("endereco");
        listView = findViewById(R.id.recyclerViewLocal);

        listarLocaisAsyncTask = new ListarLocalAsyncTask();
        listarLocaisAsyncTask.execute();

    }



    public class ListarLocalAsyncTask extends AsyncTask<String, String, String> {

        String api_token, query;

        HttpURLConnection conn;
        URL url = null;
        Uri.Builder builder;

        final String URL_WEB_SERVICES = "http://192.168.0.110/Controller/APIListarLocal.php";

        final int READ_TIMEOUT = 10000; // MILISSEGUNDOS
        final int CONNECTION_TIMEOUT = 30000;

        int response_code;


        public ListarLocalAsyncTask( ){


            this.builder = new Uri.Builder();
            builder.appendQueryParameter("api_categoria", categoria);

        }

        @Override
        protected void onPreExecute() {

            Log.i("APIListar", "onPreExecute()");

        }

        @Override
        protected String doInBackground(String... strings) {

            Log.i("APIListar", "doInBackground()");

            // Gerar o conteúdo para a URL

            try {

                url = new URL(URL_WEB_SERVICES);

            } catch (MalformedURLException e) {

                Log.i("APIListar", "MalformedURLException --> " + e.getMessage());

            } catch (Exception e) {

                Log.i("APIListar", "doInBackground() --> " + e.getMessage());
            }

            // Gerar uma requisição HTTP - POST - Result será um ArrayJson

            // conn

            try {

                conn = (HttpURLConnection) url.openConnection();
                conn.setReadTimeout(READ_TIMEOUT);
                conn.setConnectTimeout(CONNECTION_TIMEOUT);
                conn.setRequestMethod("POST");
                conn.setRequestProperty("charset", "utf-8");

                conn.setDoInput(true);
                conn.setDoOutput(true);

                conn.connect();

            } catch (Exception e) {

                Log.i("APIListar", "HttpURLConnection --> " + e.getMessage());

            }

            // Adicionar o TOKEN e/ou outros parâmetros como por exemplo
            // um objeto a ser incluido, deletado ou alterado.
            // CRUD completo

            try {

                query = builder.build().getEncodedQuery();

                OutputStream stream = conn.getOutputStream();

                BufferedWriter writer = new BufferedWriter(
                        new OutputStreamWriter(stream, "utf-8"));

                writer.write(query);
                writer.flush();
                writer.close();
                stream.close();

                conn.connect();


            } catch (Exception e) {

                Log.i("APIListar", "BufferedWriter --> " + e.getMessage());


            }

            // receber o response - arrayJson
            // http - código do response | 200 | 404 | 503

            try {

                response_code = conn.getResponseCode();

                if (response_code == HttpURLConnection.HTTP_OK) {


                    InputStream input = conn.getInputStream();
                    BufferedReader reader = new BufferedReader(

                            new InputStreamReader(input)

                    );

                    StringBuilder result = new StringBuilder();

                    String linha = null;

                    while ((linha = reader.readLine()) != null) {

                        result.append(linha);
                    }

                    return result.toString();

                } else {

                    return "HTTP ERRO: " + response_code;
                }


            } catch (Exception e) {

                Log.i("APIListar", "StringBuilder --> " + e.getMessage());

                return "Exception Erro: " + e.getMessage();

            } finally {

                conn.disconnect();
            }


        }

        @Override
        protected void onPostExecute(String result) {

            Log.i("APIListar", "onPostExecute()--> Result: " + result);

            try {

                Local local;

                JSONArray jsonArray = new JSONArray(result);

                localList = new ArrayList<>();

                if (jsonArray.length() != 0) {

                    for (int i = 0; i < jsonArray.length(); i++) {

                        JSONObject jsonObject = jsonArray.getJSONObject(i);

                        local = new Local(jsonObject.getInt("id"),
                                jsonObject.getString("nome"),
                                jsonObject.getString("endereco"),
                                jsonObject.getString("categoria"),
                                jsonObject.getString("valor"));

                        localList.add(local);

                        Log.i("APIListar", "Estado: -> " + local.getId() + " - " +local.getNome());


                    }

                    Toast.makeText(tela_lista_local.this, localList.size() + " local Listados no LogCat", Toast.LENGTH_LONG)
                            .show();

                    initial();

                }

            } catch (Exception e) {


                Log.i("APIListar", "onPostExecute()--> " + e.getMessage());


            }


        }

        public void initial(){
            adapterLocalPersonalizado = new AdapterLocalPersonalizado(localList, getApplicationContext());
            listView.setAdapter(adapterLocalPersonalizado);
            listView.setLayoutManager(new LinearLayoutManager(tela_lista_local.this));
        }
    }
}

它只返回一个项目,但是我的银行有3个。我的API没有问题,因为在调试模式下,我可以看到这三个项目,问题出在与列表进行交互时。

谢谢

1 个答案:

答案 0 :(得分:0)

我想您的回收视图的每个项目都占据了整个屏幕,您只能看到一个项目。按照@Mike M的建议,您可以尝试滚动查看是否显示其他项目。

如果是这样,请确保您的回收视图布局项目不是android:layout_width="match_parent" android:layout_height="match_parent"

如果需要特定原因,则必须发布activity_tela_lista_local_personalizada布局。

快乐编码!

相关问题