Utiliser un WebView dans un RecyclerView

  • Réponses :1
Tom Rebmeister
  • Posts de Forum 2

20 nov. 2017 à 16:35:12 via site

Bonjour à tous.
Je me suis lancé il y'a peu dans le codage d'android.
Je suis des cours en ligne et j'ai un problème dans un de mes exercices.

En effet le prof nous à donné un .jar remplis de fakenews en html.
le but est d'utiliser un RecyclerView pour afficher la liste et lors d'un toucher sur l'article il faut l'afficher dans un webview.

j'ai réussis à coder afin d'afficher la liste mais lors du OnClickListener mon appli ce ferme. je n'arrive pas à ouvrir la webview

Code de mon MainAcivity :

public class MainActivity extends AppCompatActivity {

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

    RecyclerView rv = (RecyclerView) findViewById(R.id.recyclerView);
    rv.setLayoutManager(new LinearLayoutManager(this));

    MyAdapter adapter = new MyAdapter();
    rv.setAdapter(adapter);

}

}

code de MyAdapter :

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.FakeNewsViewHolder> {

private final List<FakeNews> _list = FakeNewsList.all;

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

@Override
public FakeNewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view =LayoutInflater.from(parent.getContext()).inflate(R.layout.list_cell, parent, false);
    return new FakeNewsViewHolder(view);
}

@Override
public void onBindViewHolder(FakeNewsViewHolder holder, int position) {
    holder.bind(_list.get(position));

}

public class FakeNewsViewHolder extends RecyclerView.ViewHolder {

    private final TextView _title;
    private final TextView _htlmContent;

    public FakeNewsViewHolder(View view) {
        super(view);
        _title = (TextView) view.findViewById(R.id.name);
        _htlmContent = (TextView) view.findViewById(R.id.content);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                WebView webView = (WebView) view.findViewById(R.id.webview);
                webView.getSettings().setJavaScriptEnabled(true);
                webView.loadDataWithBaseURL(null,_htlmContent.getText().toString(),"text/html","utf_8",null);
                if (Build.VERSION.SDK_INT >= 11) {
                    webView.setBackgroundColor(0x01000000);
                } else {
                    webView.setBackgroundColor(0x00000000);
                }
            }
        });
    }

    public void bind(FakeNews article) {
        _title.setText(article.title);
        _htlmContent.setText(article.htmlContent);
    }

}

}

Le problème ce situant au setOnClickListener

j'ai pas mal chercher sur le net mais j'ai pas reussis à trouver des solution.

des idées ?

Merci bien ;)

Luna

Répondre
Tom Rebmeister
  • Posts de Forum 2

23 nov. 2017 à 22:42:08 via site

C'est bon j'ai fini par trouvé la solution \o/

en faite il faut intent une nouvelle classe avec le webview

itemView.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){
                Intent intent = new Intent(view.getContext(), WebViewActivity.class);
                intent.putExtra(WebViewActivity.WebTitle,_news.title);
                intent.putExtra(WebViewActivity.WebContent,_news.htmlContent);
                view.getContext().startActivity(intent);
            }

        });

WebViewAcitvity.java

public class WebViewActivity extends AppCompatActivity {

    public static String WebTitle = "title";
    public static String WebContent = "htmlContent";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.webview);

        String title=getIntent().getStringExtra(WebTitle);
        String htmlContent=getIntent().getStringExtra(WebContent);

        setTitle(title);

        WebView webView =(WebView) findViewById(R.id.webview);
        webView.loadData(htmlContent,"text/html; charset=UTF-8",null);
    }
}

Et surtout si le code crash vérifier votre fichier androidManifest, il faut bien donner lal igne de permission d'utiliser internet

et d'y ajouter votre activité

(c'est l'absence de cette ligne qui fait planté l'appli)

Luna

Répondre