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

У меня есть приложение Android с ящиком для навигации с пунктами меню. Это меню содержит запись для нескольких фрагментов.Один из фрагментов содержит список с именами веб-сайтов.Моя цель заключается в том, чтобы при нажатии на название веб-сайта из этого списка ссылка, связанная с элементом списка, сохраненным в файле stringarray в файле strings.xml, открывалась в новом фрагменте с веб-представлением, открывающим сайт.

Пока что яреализовали этот код для фрагмента со списком

class AtlasListFragment extends android.support.v4.app.ListFragment implements AdapterView.OnItemClickListener {
@Override
public View onCreateView(LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.atlas_list_fragment, container, false);
    return view;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(),
            R.array.tut_titles, android.R.layout.simple_list_item_1);
    setListAdapter(adapter);
    getListView().setOnItemClickListener(this);
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
    Toast.makeText(getActivity(), "Item: " + position, Toast.LENGTH_SHORT).show();
}}

, а код, который запускает фрагмент из панели навигации, находится ниже

@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();
    android.support.v4.app.Fragment fragment = null;
    if (id == R.id.home) {
        fragment = frag;
     else if (id == R.id.settings) {
        fragment=new Settings();

    } else if (id == R.id.about_us) {
        fragment=new AboutUc();
    }
    else if(id == R.id.atlas){
        fragment = new AtlasListFragment();
    }
    else{

    }


    if (fragment!=null)
    {
        FragmentManager fragmentManager=getSupportFragmentManager();
        FragmentTransaction ft=fragmentManager.beginTransaction();

        ft.replace(R.id.fragmentview,fragment);
        ft.commit();
    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

Ответы [ 2 ]

0 голосов
/ 25 мая 2018
 First of all you will need broadcast so you can send your clicked
 URL from adapter to your fragment, and in your main fragment when you
 receive the url you can use intent or webview

1- CREATE BroadcastHelper CLASS:

    public class BroadcastHelper {
         public static final String BROADCAST_EXTRA_METHOD_NAME = "INPUT_METHOD_CHANGED";
        public static final String ACTION_NAME = "hassan.hossam";
        private static final String UPDATE_LOCATION_METHOD = "updateLocation";


        public static void sendInform(Context context, String method) {
            Intent intent = new Intent();
            intent.setAction(ACTION_NAME);
            intent.putExtra(BROADCAST_EXTRA_METHOD_NAME, method);
            try {
                context.sendBroadcast(intent);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public static void sendInform(Context context, String method, Intent intent) {
            intent.setAction(ACTION_NAME);
            intent.putExtra(BROADCAST_EXTRA_METHOD_NAME, method);
            try {
                context.sendBroadcast(intent);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

2 - отправьте намерение из вашего адаптера

       holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent url = new Intent("url");
                url ("url_adapter",item.get(position).getURL());
                BroadcastHelper.sendInform(context,"url",url);
            }
        });

3- в вашем фрагменте это использование:

    Receiver receiver;
    boolean isReciverRegistered = false;


    @Override
    public void onResume() {
        super.onResume();

        if (receiver == null) {
            receiver = new Receiver();
            IntentFilter filter = new IntentFilter(BroadcastHelper.ACTION_NAME);
            getActivity().registerReceiver(receiver, filter);
            isReciverRegistered = true;
        }
    }

    @Override
    public void onDestroy() {
        if (isReciverRegistered) {
            if (receiver != null)
                getActivity().unregisterReceiver(receiver);
        }
        super.onDestroy();
    }


    private class Receiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            Log.v("r", "receive " + arg1.getStringExtra(BroadcastHelper.BROADCAST_EXTRA_METHOD_NAME));
            String methodName = arg1.getStringExtra(BroadcastHelper.BROADCAST_EXTRA_METHOD_NAME);
            if (methodName != null && methodName.length() > 0) {
                Log.v("receive", methodName);
                switch (methodName) {

                    case "url":

                        String url_adapter = arg1.getStringExtra("url_adapter");
                        Intent i = new Intent(Intent.ACTION_VIEW);
                        i.setData(Uri.parse(url_adapter));
                        startActivity(i);
                        break;

                    default:
                        break;
                }
            }
        }
    }

Надеюсь, это помогло

0 голосов
/ 25 мая 2018

С помощью этого метода вы можете открыть веб-просмотр, где вы хотите использовать макет WebView и использовать этот метод в своей деятельности

public void openWebView(String url){   
webView = (WebView) findViewById(R.id.webView1);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl(url);
}

Надеюсь, он работает для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...