Как загрузить веб-сайт на новый фрагмент с веб-представлением, нажав на элементы в представлении реселлера? - PullRequest
0 голосов
/ 02 ноября 2019

Я не знаю, как загрузить веб-сайт на новый fragment с веб-представлением, нажав на один из элементов, определенных в Recyclerview. Вот мой код:

NewsItems.java

package com.example.assignment_4_task_1;

import android.view.View;

public class NewsItems {
    private int image;
    private String text;

    public NewsItems(){
    }

    public NewsItems(int image, String text) {
        this.image = image;
        this.text = text;
    }

    //Getter
    public int getImage() {
        return image;
    }

    public String getText() {
        return text;
    }

}

```

Recyclerview Adapter.java

package com.example.assignment_4_task_1;

import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
    Context mContext;
    List<NewsItems> mData;

    public RecyclerViewAdapter(Context mContext, List<NewsItems> mData) {
        this.mContext = mContext;
        this.mData = mData;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view;
        view = LayoutInflater.from(mContext).inflate(R.layout.layout_grid_item, parent, false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.image.setImageResource(mData.get(position).getImage());
        holder.text.setText(mData.get(position).getText());
    }

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

    public static class ViewHolder extends RecyclerView.ViewHolder {
        private ImageView image;
        private TextView text;
        FragmentNewsItems fragmentNewsItems = new FragmentNewsItems();


        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            image = itemView.findViewById(R.id.image);
            text = itemView.findViewById(R.id.text);
        }

    }


}

FragmentNewsItems.java

package com.example.assignment_4_task_1;

import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class FragmentNewsItems extends Fragment {

    View view;
    private RecyclerView recyclerView;
    private List<NewsItems> cyberNews;
    private FragmentNewsItems fragmentNewsItems;

    public FragmentNewsItems(){
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.f_news_items_layout, container, false);
        recyclerView = (RecyclerView) view.findViewById(R.id.news_items_recycler_view);

        RecyclerViewAdapter recyclerAdapter = new RecyclerViewAdapter(getContext(), cyberNews);

        recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
        recyclerView.setAdapter(recyclerAdapter);
        return view;
    }

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

        cyberNews = new ArrayList<>();
        cyberNews.add(new NewsItems(R.drawable.cyber1, "The  of cybersecurity in 5G-connected world"));
        cyberNews.add(new NewsItems(R.drawable.cyber2, "Google discovered several iPhone security flaws, and Apple still hasn't patched one"));
        cyberNews.add(new NewsItems(R.drawable.cyber3, "WhatsApp and Telegram media files aren't so secure"));
        cyberNews.add(new NewsItems(R.drawable.cyber4, "Microsoft Exposes Russian Cyberattacks on Phones, Printers, Video Decoders"));
        cyberNews.add(new NewsItems(R.drawable.cyber5, "Tesla demonstrated the power of The Internet of Things"));

    }
}

и

MainActivity.java

package com.example.assignment_4_task_1;

import android.os.Bundle;

import com.google.android.material.tabs.TabLayout;

import androidx.viewpager.widget.ViewPager;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private TabLayout tabs;
    private ViewPager viewPager;
    private SectionsPagerAdapter adapter;
    private FragmentNewsItems fragmentNewsItems;

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

        tabs = findViewById(R.id.tabs);
        viewPager = findViewById(R.id.view_pager);
        adapter = new SectionsPagerAdapter(getSupportFragmentManager());

        //Add Fragment to the Layout
        adapter.addFragment(new FragmentNewsItems(), "CYBERSECURITY");
        adapter.addFragment(new FragmentWebPage(), "AI");

        viewPager.setAdapter(adapter);
        tabs.setupWithViewPager(viewPager);

    }
}

Вывод состоит в том, что он показывает один два фрагментав viewpager (с двумя вкладками соответственно) и в первом фрагменте он показывает список новостей в шахматном порядке. Моя задача состоит в том, чтобы «функционализировать» приложение, чтобы оно загружало веб-сайт, щелкнув один из этих элементов, перечисленных здесь:

(FragmentNewsItems.java, который вы видите выше)

        cyberNews = new ArrayList<>();
        cyberNews.add(new NewsItems(R.drawable.cyber1, "The  of cybersecurity in 5G-connected world"));
        cyberNews.add(new NewsItems(R.drawable.cyber2, "Google discovered several iPhone security flaws, and Apple still hasn't patched one"));
        cyberNews.add(new NewsItems(R.drawable.cyber3, "WhatsApp and Telegram media files aren't so secure"));
        cyberNews.add(new NewsItems(R.drawable.cyber4, "Microsoft Exposes Russian Cyberattacks on Phones, Printers, Video Decoders"));
        cyberNews.add(new NewsItems(R.drawable.cyber5, "Tesla demonstrated the power of The Internet of Things"));

Но я не знаю, как заставить это работать.

Я пробовал разные способы, но кажется, что я просто не понимаю логику этого приложения. Я новичок в Android, и сейчас мне очень сложно ориентироваться между различными фрагментами, действиями, их инициализацией и т. Д.

Приложение работает, оно показывает все макеты, которые я создал, но делаетне открывается webview

1 Ответ

0 голосов
/ 02 ноября 2019

Прежде всего, у вас есть возможность создать событие клика для держателя вида переработчика

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {

// add this line
private AdapterView.OnItemClickListener onItemClickListener;

    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
            private ImageView image;
            private TextView text;
            FragmentNewsItems fragmentNewsItems = new FragmentNewsItems();


            public ViewHolder(@NonNull View itemView) {
                super(itemView);
                image = itemView.findViewById(R.id.image);
                text = itemView.findViewById(R.id.text);

                itemView.setOnClickListener(this);
            }

      @Override
            public void onClick(View view) {
                mAdapter.onItemHolderClick(ViewHolder.this);
            }

        }

        public void setOnItemClickListener(AdapterView.OnItemClickListener onItemClickListener) {
            this.onItemClickListener = onItemClickListener;
        }

        private void onItemHolderClick(ViewHolder holder) {
            if (onItemClickListener != null)
                onItemClickListener.onItemClick(null, holder.itemView, holder.getAdapterPosition(), holder.getItemId());
        }
}

Теперь добавьте событие клика в свой фрагмент

public class FragmentNewsItems extends Fragment implements AdapterView.OnItemClickListener{


View view;
    private RecyclerView recyclerView;
    private List<NewsItems> cyberNews;
    private FragmentNewsItems fragmentNewsItems;

    public FragmentNewsItems(){
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.f_news_items_layout, container, false);
        recyclerView = (RecyclerView) view.findViewById(R.id.news_items_recycler_view);

        RecyclerViewAdapter recyclerAdapter = new RecyclerViewAdapter(getContext(), cyberNews);
// add this line
recyclerAdapter .setOnItemClickListener(this);

        recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
        recyclerView.setAdapter(recyclerAdapter);
        return view;
    }

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

        cyberNews = new ArrayList<>();
        cyberNews.add(new NewsItems(R.drawable.cyber1, "The  of cybersecurity in 5G-connected world"));
        cyberNews.add(new NewsItems(R.drawable.cyber2, "Google discovered several iPhone security flaws, and Apple still hasn't patched one"));
        cyberNews.add(new NewsItems(R.drawable.cyber3, "WhatsApp and Telegram media files aren't so secure"));
        cyberNews.add(new NewsItems(R.drawable.cyber4, "Microsoft Exposes Russian Cyberattacks on Phones, Printers, Video Decoders"));
        cyberNews.add(new NewsItems(R.drawable.cyber5, "Tesla demonstrated the power of The Internet of Things"));

    }


@Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// here open new activity or replace fragment which have webview.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...