Android : problème de démarrage d'une 2e activité avec une RecyclerView
Bonjour. Je suis nouveau dans ce forum. Je développe en Java Android une liste d'articles (1 String titre + 1 WebView contenu par article) de nouvelles humoristiques au sein d'une RecyclerView. Lorsqu'on clique sur un titre, la 2e Activity "LectureContenu" doit démarrer pour lire le contenu de l'article sous forme d'une WebView : le problème est que mon IDE ne reconnaît pas mon paramètre "intent" dans mon instruction "startActivity". Par contre, quand je teste avec une simple AlertDialog qui s'affiche au lieu d'une 2e Activity qui démarre, là mon programme fonctionne.
Voici le code de mon Adapter de RecyclerView qui fonctionne (simple AlertDialog qui s'affiche quand on clique sur un titre d'article) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
package com.lolocompany.newsreader;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.ShareCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.util.Pair;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.TextView;
import android.widget.Toast;
import com.oc.rss.fake.FakeNews;
import com.oc.rss.fake.FakeNewsList;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilderFactory;
import static android.support.v4.content.ContextCompat.createDeviceProtectedStorageContext;
import static android.support.v4.content.ContextCompat.startActivity;
//REESSAYER APRES ABLATION DE ELLIPSIZE
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
//FAKENEWSLIST ICI :
List<FakeNews> list= FakeNewsList.all;
@Override
public int getItemCount(){
return list.size();
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
LayoutInflater inflater=LayoutInflater.from(parent.getContext());
View view=inflater.inflate(R.layout.liste_cellules, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position){
FakeNews pair=list.get(position);
holder.display(pair);
}
public class MyViewHolder extends RecyclerView.ViewHolder{
String retourFakeNews=FakeNews.class.toString(); //TITLE ET HTMLCONTENT DE FAKENEWS ICI
String titre_string=FakeNews.class.toString();
private final TextView titre_article;
private final WebView contenu_article;
private FakeNews currentFakeNews;
private String currentTitreString;
public MyViewHolder(final View itemView){
super(itemView);
titre_article=(TextView) itemView.findViewById(R.id.titre_article);
contenu_article=(WebView) itemView.findViewById(R.id.contenu_article);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new AlertDialog.Builder(itemView.getContext())
.setTitle(currentTitreString)
.setMessage("Webview ici")
.show();
}
});
}
public void display(FakeNews pair){
currentFakeNews=pair;
titre_article.setText(pair.title);
}
}
} |
Et voici le code de mon Adapter de ma RecyclerView qui ne fonctionne pas (tentative de démarrage de la 2e Activity "LectureContenu") :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
package com.lolocompany.newsreader;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.ShareCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.util.Pair;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.TextView;
import android.widget.Toast;
import com.oc.rss.fake.FakeNews;
import com.oc.rss.fake.FakeNewsList;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilderFactory;
import static android.support.v4.content.ContextCompat.createDeviceProtectedStorageContext;
import static android.support.v4.content.ContextCompat.startActivity;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
//FAKENEWSLIST ICI :
List<FakeNews> list= FakeNewsList.all;
@Override
public int getItemCount(){
return list.size();
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
LayoutInflater inflater=LayoutInflater.from(parent.getContext());
View view=inflater.inflate(R.layout.liste_cellules, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position){
FakeNews pair=list.get(position);
holder.display(pair);
}
public class MyViewHolder extends RecyclerView.ViewHolder{
//FAUT-IL DEES GETTERS POUR TITLE ET HTMLCONTENT DE FAKENEWS.CLASS ??
String retourFakeNews=FakeNews.class.toString(); //TITLE ET HTMLCONTENT DE FAKENEWS ICI !!
String titre_string=FakeNews.class.toString();
private final TextView titre_article;
private final WebView contenu_article;
private FakeNews currentFakeNews;
//private Pair<FakeNews, FakeNews> currentPair;
private String currentTitreString;
public MyViewHolder(final View itemView){
super(itemView);
titre_article=(TextView) itemView.findViewById(R.id.titre_article);
contenu_article=(WebView) itemView.findViewById(R.id.contenu_article);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//C'EST ICI QUE CA SE GATE !!!
Intent intent=new Intent(itemView.getContext(), LectureContenu.class);
startActivity(intent);
}
});
}
public void display(FakeNews pair){
currentFakeNews=pair;
titre_article.setText(pair.title);
}
}
} |
Est-ce un problème de contexte et d'un mauvais "startActivity" utilisé ? Lorsque j'ai utilisé des Intent et des startActivity ailleurs que dans des Adapter de RecyclerView, je n'avais pas de problèmes. Merci beaucoup pour vos réponses.
Cela fonctionne en passant par un fragment !
Bonjour et merci beaucoup Christian Djo pour ta réponse très complète ; cela fonctionne en passant par un fragment qui communique avec l'activité :)