Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cristianomg

Exibir a activity de detalhes do item RecyclerView

Recommended Posts

E ae pessoal, gostaria de uma orientação sobre um erro que estou tomando e não consegui contornar corretamente, meu conhecimento com android é de basico autodidata.

Bom o cenário é eu ger uma lista vinda de uma api que traz dados do banco de dados , imagem, nome de cidade e descrição.

Quero que ao clicar seja aberta uma activity onde a mesma exiba os dados da cidade selecionada exibindo a imagem maior, nome cidade, descrição e data de saida do turismo.

Pois bem quando eu clico num item da lista tomo o erro:

 

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
        at android.content.ComponentName.<init>(ComponentName.java:77)
        at android.content.Intent.<init>(Intent.java:4280)
        at garagetalke.com.laftturismo.adaptador.GramadoAdapter$GramadoHolder.onClick(GramadoAdapter.java:97)

 

Eu uso fragmento para gerar a lista no recyclerView e criei um activity DetalhesLugares com o seu xml certinho para exibir os dados da cidade que eu cliquei, o meu fragmento que gera a lista de itens esta abaixo:

 

fragment_lista_lugares_gramado.java

public class fragment_lista_lugares_gramado extends Fragment implements Response.Listener<JSONObject>, Response.ErrorListener{
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";
    private String mParam1;
    private String mParam2;

    RecyclerView recyclerAnuncio;
    ArrayList<Lugares> listaLugares;
    ProgressDialog progresso;
    RequestQueue request;
    JsonObjectRequest jsonObjectReq;

    private fragment_lista_lugares_gramado.OnFragmentInteractionListener mListener;

    public fragment_lista_lugares_gramado() {
        // Required empty public constructor
    }

    public static fragment_lista_lugares_gramado newInstance(String param1, String param2) {
        fragment_lista_lugares_gramado fragment = new fragment_lista_lugares_gramado();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);

        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View vista = inflater.inflate(R.layout.places_recycler_list, container, false);
        listaLugares=new ArrayList<>();
        recyclerAnuncio= (RecyclerView) vista.findViewById(R.id.listRecycler);
        recyclerAnuncio.setLayoutManager(new LinearLayoutManager(this.getContext()));
        recyclerAnuncio.setHasFixedSize(true);
        request= Volley.newRequestQueue(getContext());
        carregarWEBService(); //aqui chamo minha API que me traz os dados do banco corretamente e exibe no App
        return vista;
    }



    private void carregarWEBService() {
       ....minha API que faz a busca

    }

    // TODO: Rename method, update argument and hook method into UI event
    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
            mListener.onFragmentInteraction(uri);
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    @Override
    public void onErrorResponse(VolleyError error) {
        progresso.hide();
        Toast.makeText(getContext(), "Não foi possível listar os lugares " +error.toString() , Toast.LENGTH_SHORT).show();
        Log.i("ERROR", error.toString());
    }

    @Override
    public void onResponse(JSONObject response) {
        progresso.hide();
        Lugares lugares = null;
        Retorno do meu json da API - OK
        try {
            for(int i=0; i<json.length();i++){
                lugares = new Lugares();
                JSONObject jsonObject = null;
                jsonObject = json.getJSONObject(i);
                lugares.setId(jsonObject.optString("id"));
                //seto todos os dados de retorno - OK
                listaLugares.add(lugares);
            }

            progresso.hide();
            GramadoAdapter adapter = new GramadoAdapter(listaLugares, fragment_lista_lugares_gramado.this);
            recyclerAnuncio.setAdapter(adapter);
        }catch (JSONException e){
            e.printStackTrace();
            progresso.hide();
            Toast.makeText(getContext(), "Não foi possível listar os lugares " +response , Toast.LENGTH_SHORT).show();
        }
    }

       public interface OnFragmentInteractionListener {
        // TODO: Update argument type and name
        void onFragmentInteraction(Uri uri);
    }
}

 

Aqui esta meu Adapter : GramadoAdapter.java

 


public class GramadoAdapter extends RecyclerView.Adapter<GramadoAdapter.GramadoHolder>  {

    ArrayList<Lugares> listaLugares = new ArrayList<>();
    fragment_lista_lugares_gramado ctx;
    Context fragment_lista_lugares_gramado;

    public GramadoAdapter(ArrayList<Lugares> listaLugares, fragment_lista_lugares_gramado ctx ){ 
        this.listaLugares = listaLugares;
        this.ctx = ctx;
    }

    @NonNull
    @Override
    public GramadoHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_lugares,parent,false);
        GramadoHolder gramadoViewHolder = new GramadoHolder(view, fragment_lista_lugares_gramado,listaLugares);
        return gramadoViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull GramadoHolder holder, int position) {

        Lugares LUG = listaLugares.get(position);
        holder.id.setText(LUG.getId().toString());
        holder.cidade.setText(LUG.getCidade());
        holder.descricao.setText(LUG.getDescricao());
        holder.dataSaida.setText("Quando? "+(LUG.getDataSaida()));

        if(listaLugares.get(position).getImagem() != null){
            holder.idImagem.setImageBitmap(LUG.getImagem());
        }else{
            holder.idImagem.setImageResource(R.drawable.publicacao_sem_foto);
        }
    }

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

    public class GramadoHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        TextView id, cidade,  descricao, dataSaida,  lugaresOnibus,  valor,  rating;
        ImageView idImagem;
        ArrayList<Lugares> listaLugares = new ArrayList<Lugares>();
        Context ctx;
        Context fragment_lista_lugares_gramado;

        public GramadoHolder(View view, Context fragment_lista_lugares_gramado, ArrayList<Lugares> listaLugares) {
            super(view);
            this.listaLugares = listaLugares;
            view.setOnClickListener(this);
            id = (TextView) view.findViewById(R.id.id_place);
            cidade = (TextView) view.findViewById(R.id.cidade_place);
            descricao = (TextView) view.findViewById(R.id.descricao_place);
            dataSaida = (TextView) view.findViewById(R.id.datasaida_place);
            idImagem =  view.findViewById(R.id.place_image);
        }

        @Override
        public void onClick(View v) {
            int position = getAdapterPosition();
            Lugares lugares = this.listaLugares.get(position);
  			//Eu acho que aqui esta meu problema mas nao sei o que pode ser...tipo nao abre a activity detalhes
  			//ja tentei getActivity(), getApplication() e outras coisas tb, como é o fragmento que gera a lista
  			//então nao o que fazer pra instanciar
            Intent intent = new Intent(fragment_lista_lugares_gramado, DetalhesLugares.class);
            intent.putExtra("tvImagem",lugares.getImagem());
            intent.putExtra("tvCidade",lugares.getCidade());
            intent.putExtra("tvdescricao",lugares.getDescricao());

            this.fragment_lista_lugares_gramado.startActivity(intent);
        }

    }
}

 

DetalhesActivity.java


ImageView imageView;
TextView text_Cidade, text_Descricao;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detalhes_lugares);

    imageView = (ImageView) findViewById(R.id.tvImagem);
    text_Cidade = (TextView) findViewById(R.id.tvCidade);
    text_Descricao = (TextView) findViewById(R.id.tvDesricao);

    imageView.setImageResource(getIntent().getIntExtra("tvImagem",00));
    text_Cidade.setText("Cidade: "+getIntent().getStringExtra("tvCidade"));
    text_Descricao.setText("Descrição: "+getIntent().getStringExtra("tvdescricao"));

}

 

Alguém sabe me orientar do que fazer pra conseguir?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por pashaa
      Como podem ver a google não aceita mais a SDK da unity ads por motivos da empresa
      Então resolvi remover toda a SDK do meu código. Libs,linhas de comando, tudo. e mesmo assim ainda ela acusa que tenho a sdk dentro do meu app
      Já tenho mais ou menos 1 ano programando em android e nunca tinha visto algo sobre ou esse erro persistir já que tirei tudo de dentro do app
      A minha dúvida é, onde estou errando? Onde deixei alguma coisa sobre essa sdk?Que inclusive coloquei pra teste a uns 5 meses atrás e até tinha esquecido dela kk
      Peço que me ajudem dando sugestões de como remover por completo pois eu praticamente reverti o processo de adicionar a SDK e todo tipo de linha relacionada a unity.ads
       

    • Por Fernando Rafael
      Bom dia, estou baixando arquivos que estão em uma hospedagem própria para serem acessados por um aplicativo que estou desenvolvendo (consigo fazer normalmente utilizando os comandos citado mais a baixo), porém os arquivos ficam salvos na pasta padrão de DOWNLOADS do Android, minha intenção não é ficar acumulando estes arquivos no aparelho, ou esperar que o usuário exclua manualmente, gostaria em salva-los em uma pasta interna do aplicativo para que seja possível excluir automaticamente pelo próprio aplicativo, já tentei como alternativa excluir esses arquivos da pasta DOWNLOADS, mas não consegui...
       
      Segue o código que estou usando para baixar os arquivos, queria adaptar para baixar direto na pasta interna do aplicativo, ou como alternativa caso isso não seja possível, conseguir excluir esses arquivos da pasta DOWNLOADS do Android...
       
      String url = "https://www.site.com/arquivo.pdf"; //Arquivo que vou baixar DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); request.setDescription("Alguma descrição"); request.setTitle("Algum titulo"); //A notificação de conslusão só esta disponível a partir da API 11 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { request.allowScanningByMediaScanner(); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); } //Salvando o arquivo no diretório de Downloads request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "arquivo.pdf"); DownloadManager manager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); manager.enqueue(request);  
    • Por Fernando Rafael
      Bom dia, alguém poderia me ajudar com esse problema? 
       
      Estou fazendo um aplicativo bem simples em que sua única função será criar uma pasta no celular (em local acessível pelo gerenciador de arquivos do usuário), e posteriormente copiar arquivos de outro local ou rede e colocar nesta pasta.
       
      Fiz algumas pesquisas, mas por incrível que pareça não encontrei algo que tenha funcionando. Também tenho dúvidas sobre qual seria o equivalente ao "C:/" do Android.
    • Por rharisonluca
      Bom dia galera.
       
      Vou iniciar uma projeto para a empresa onde eu trabalho, eu não sou desenvolvedor, porém tenho noção e sou formado na área. Abaixo vou explicar o modelo do projeto:
       
      O projeto consiste em um aplicativo para controle de roteirização da frota;
      Cada motorista terá acesso ao app pelo celular com login e senha;
      O encarregado pelo logística terá que ter acesso pelo PC (WEB) onde ele irá direcionar os roteiros para cada motorista, nessa plataforma web ele irá enviar as coletas e entregas que cada motorista terá que fazer.
       
      Basicamente o projeto é esse, preciso de norte para saber o que tenho que estudar para desenvolver esse projeto, qual framework estudar, qual liguagem, etc.
       
      Desde já agradeço, abraços.
       
      Att.
       
    • Por glocatelli
      Boa tarde,

      Preciso desenvolver um app com os parâmetros descritos na tabela e estou com dificuldade de pensar uma forma de fazer isso, pensei em vários "If's" para classificar o conforto térmico, mas como existem resultados que se repetem em mais de uma classificação acabei descartando esse caminho.
      Se possível me deem dicas de como os senhores procederiam =D

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.