Hartnäckige Ignorierung des Themes und Tabs und eine gute Adressleiste für WebView

  • Antworten:78
Rexxar
  • Forum-Beiträge: 2.563

22.12.2014, 09:31:16 via App

Pascal P.

Ich dachte du wolltest keine Tabs oder implizierst du damit deine alternative zu einem TabHost?

Doch, aber nicht mit dem Tab Host Bedienelement.

Ich habe jetzt noch nie etwas von einem WebView Fragment gehört, gibt es das?

Ja. http://developer.android.com/reference/android/webkit/WebViewFragment.html

Sonst grundlegende Logik:
1. auswählen des "Tabs" in deiner PopupBox
2. auf den click reagieren und entsprechendes Fragment darstellen [am besten per FragmentManager austauchen, wie man das so macht dass die Webseite aktiv gehalten wird, weiss ich nicht, dass solltest du mal nachschauen].
3.ggf. einen PopupMenüpukt für neue Tabs

Genauso hatte ich es mir vorgestellt :).

Liebe Grüße, Rexxar :)
Moto Z Play Stock
Nvidia Shield Tablet K1
http://www.androidpit.de/forum/634540/allgemeines-faq-fuer-neulinge

Antworten
Rexxar
  • Forum-Beiträge: 2.563

23.12.2014, 19:57:55 via App

Kann mir jemand sagen, wie ich dem WebViewFragment eine WebView zuweise? Oder ist das nicht nötig? Muss ich ein Fragment in mein Layout packen oder wie ist das?
Achja, auch eine große Hilfe wäre mir, wie ich meine App als Browser deklarieren kann? Ich kenne den genauen Intent nicht, es ist wohl Action.VIEW. Mehr weiss ich nicht, die App "Intent Analyser" sagt mir das die Category "NONE" ist und Type "UNKNOWN". Leider hat dieses dumme XML kein vernüftiges Vorschlagssystem und ich weiss nicht wie ich das im Manifest eintippen soll.

Liebe Grüße, Rexxar :)
Moto Z Play Stock
Nvidia Shield Tablet K1
http://www.androidpit.de/forum/634540/allgemeines-faq-fuer-neulinge

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.12.2014, 11:59:56 via App

Nach der Docu musst du das nicht mehr tun da gibt es eine Methode wie z.b getWebView() schau dir die docu einfsch mal an.

Und als Browser gibt kannst du es nixht deklarieren du kannst aber sagen dass alle Urls mit deiner App geöffnet werden. Das geht dann per Intent Filter: http://codetheory.in/android-intent-filters/

LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rexxar
  • Forum-Beiträge: 2.563

24.12.2014, 15:45:25 via Website

Danke für deine stetige Hilfe, frohe Weihnachten übrigens :D
Dein Intent Tipp war richtig, danke.
Mein Problem ist jetzt nur, dass die getWebView nur mit einer normalen WebView geht. Ich benutz jedoch meine Custom Class Observeable WebView... Ich habe auch eine Custom WebViewFragment Class, aber was soll ich da reinschreiben um den getWebView Befehl anzupassen?

Liebe Grüße, Rexxar :)
Moto Z Play Stock
Nvidia Shield Tablet K1
http://www.androidpit.de/forum/634540/allgemeines-faq-fuer-neulinge

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.12.2014, 15:50:21 via App

Das geht nicht dann muss du auf ein normales Fragment umstellen und da eine WebView drauf machem.

Frohe Weihnachten :)

Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rexxar
  • Forum-Beiträge: 2.563

15.01.2015, 16:12:11 via Website

So, nach einer Zeit Pause mache ich mal wieder etwas weiter.
Ich habe nun meine WebView in ein anderes Layout gepackt, welche in meinem CustomFragment "fraggy" folgendermaßen eingelesen wird:

public class fraggy extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment

    View view = inflater.inflate(R.layout.webviewfrag, container, false);
    ObservableWebView mWebView = (ObservableWebView) view.findViewById(R.id.mWebView);
    return view;
}

}

Die WebView ist nun in einem Layout Namens "webviewfrag". Nun habe ich das ganze in meinem Code so importieren wollen:

FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.frameforweb, new fraggy());
    ft.commit();

Das "frameforweb" ist ein DummyFrameLayout, was dann ersetzt wird.
(Steht testweise im OnCreate drin)
Nun wird im Code ja noch immer mWebView.machediesunddas geschrieben, und er kennt mWebView nicht mehr. (Klar jetzt ist die ja nicht mehr im MainLayout)
Wie kann ich die jetzt ansteuern?

Liebe Grüße, Rexxar :)
Moto Z Play Stock
Nvidia Shield Tablet K1
http://www.androidpit.de/forum/634540/allgemeines-faq-fuer-neulinge

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

15.01.2015, 18:24:32 via Website

Das musst du nun im Fragment machen.
Jetzt hast du deine WebView varaible im Fragment, nur da kannst du die webView jetzt steuern.
D.h. alle Funktionen die die WebView ausführen soll, musst du estra im Fragment definieren und unter umständen von aussen verügbar sein.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rexxar
  • Forum-Beiträge: 2.563

15.01.2015, 18:48:05 via App

Na das wird eine Arbeit.... :D Wie genau kann ich das aktuell benutzte Fragment herausbekommen? also sowas wie (Pseudocode) getactivefragment.updateurl("www.test.de");
Oder geht da einfach fraggy.updateurl("www.test.de");

— geändert am 15.01.2015, 18:49:04

Liebe Grüße, Rexxar :)
Moto Z Play Stock
Nvidia Shield Tablet K1
http://www.androidpit.de/forum/634540/allgemeines-faq-fuer-neulinge

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

15.01.2015, 19:06:02 via Website

Na ja beim Initialisieren würde ich die URL schon übergen a la:

new fraggy("https://google.de");

Theoretisch kannst du auch eine Klassenvariable als Public definieren und darüber auf die view zugreifen.
Dann musst du im FragmentManager oder in der steuerungs Activity eine liste mit Fragment also fraggy's haben, damit du die einzelnen Views steuern kannst.
dann würde ein Url Update so aussehen:

deineFragmentListe.get(pos).getWebView().loadUrl("https://www.nextpit.de/forum/");

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rexxar
  • Forum-Beiträge: 2.563

15.01.2015, 19:46:57 via App

Wie genau bzw was ist die Liste? Eine ArrayList oder wie ist das? Mein Problem ist, dass nur dann ein neues fraggy erstellt wird, wenn der User einen neuen Tab öffnet. (über das PopUp Dings)Das bedeutet, meinFragment wird nur gewechselt wenn ein neuer Tab ausgewählt wird, nicht bei jeder URL.

Liebe Grüße, Rexxar :)
Moto Z Play Stock
Nvidia Shield Tablet K1
http://www.androidpit.de/forum/634540/allgemeines-faq-fuer-neulinge

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

15.01.2015, 20:12:50 via Website

Ja das schon und ja du könntest eine Array list nehmen.
z.b.
Pseudocode:

ArrayList<fraggy> fragList = new ArrayList<fraggy>();

fragList.add(new fraggy("http://google.de"); //Hier einfach bei jedem neuen Tab dein Ftagment objekt in die fraggy Liste einfügen.
fragList.add(new fraggy("https://www.nextpit.de"));

//eine bedienung der WebView würde so aussehen
fragList.get(tabPos).getWebView().loadURL("https://paypal.com"); //die Integer tabPos ist dann der selected index in deinem PopUp, somit wird das aktuelle Fragment aus der Liste gesucht und damit kann dann die WebView gesteuert werden.

— geändert am 15.01.2015, 20:13:03

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rexxar
  • Forum-Beiträge: 2.563

15.01.2015, 20:44:15 via App

Wie setze ich getWebView um? Ich benutze ja jetzt ein normales Fragment weil meine Custom Observable WebView mit dem anderen nicht ging.

Liebe Grüße, Rexxar :)
Moto Z Play Stock
Nvidia Shield Tablet K1
http://www.androidpit.de/forum/634540/allgemeines-faq-fuer-neulinge

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

15.01.2015, 21:58:50 via App

Da ich davon ausgehe dass du auf die Funktionen deiner CustomWebView nicht verzichten willst:

Klassenvariable: ObservableWebView mView;
onCreateView:
ObservableWebView mWebView = (ObservableWebView) view.findViewById(R.id.mWebView);
mView = mWebView;
return view;

public ObservableWebView getWebView()
{
return mView;
}

— geändert am 15.01.2015, 21:59:16

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rexxar
  • Forum-Beiträge: 2.563

16.01.2015, 14:04:15 via Website

Pascal P

Klassenvariable: ObservableWebView mView;
onCreateView:
ObservableWebView mWebView = (ObservableWebView) view.findViewById(R.id.mWebView);
mView = mWebView;
return view;

Wo soll ich das einfügen? In die Observable WebView Klasse? Leider kennt er dann die undefinierte Variable view nicht...

Liebe Grüße, Rexxar :)
Moto Z Play Stock
Nvidia Shield Tablet K1
http://www.androidpit.de/forum/634540/allgemeines-faq-fuer-neulinge

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

16.01.2015, 14:08:40 via Website

Hmm, müsste doch so gehen:

public class fraggy extends Fragment {
ObservableWebView mView;

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment

    View view = inflater.inflate(R.layout.webviewfrag, container, false);
    ObservableWebView mWebView = (ObservableWebView) view.findViewById(R.id.mWebView);
mView = mWebView ;
    return view;
}

public ObservableWebView getWebView()
{
return mView;
}

}

— geändert am 16.01.2015, 14:08:50

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rexxar
  • Forum-Beiträge: 2.563

16.01.2015, 14:18:06 via Website

Danke, ich habe das jetzt bei Fraggy eingefügt. Blöderweise kann ich den Befehl getWebView nicht tätigen, er wird mir nicht vorgeschlagen. (In meiner Activity)

Liebe Grüße, Rexxar :)
Moto Z Play Stock
Nvidia Shield Tablet K1
http://www.androidpit.de/forum/634540/allgemeines-faq-fuer-neulinge

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

16.01.2015, 14:19:12 via Website

Wie sieht denn dein Zugriffscode aus?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

16.01.2015, 14:24:37 via Website

Also an den "Zugriffsrechten" kanns nicht liegen, die Methode ist ja public.

Also:

fraggy  frag = new fraggy(url);
ObservableWebView owv = frag.getWebView();

Vielleicht so?
Denn dnnn hast du vergessen dass du eine instanz eines Fraggy's brauchst ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rexxar
  • Forum-Beiträge: 2.563

16.01.2015, 14:28:57 via Website

Danke danke danke Pascal :) Ich habe meine Observable WebView statt owv einfach auch mWebView genannt - so kann ich meinen bisherigen Code stehen lassen.
fraggy frag = new fraggy(url); Woher weiß die WebView bzw. fraggy, was url bedeutet und was damit getan werden muss?
Ich frage nur, warum du dass da hingetan hast, soll ich das noch integrieren oder wie ist das?

Liebe Grüße, Rexxar :)
Moto Z Play Stock
Nvidia Shield Tablet K1
http://www.androidpit.de/forum/634540/allgemeines-faq-fuer-neulinge

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

16.01.2015, 14:36:23 via Website

War nur ein Vorschlag, so hättest du zum Beipiel als Starturl jedes Tabs schon google oder etwas anderes.
Natürlich kannst du das auch weglassen, musst du entscheiden ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

16.01.2015, 14:41:03 via Website

Danke :D

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rexxar
  • Forum-Beiträge: 2.563

17.01.2015, 12:02:59 via Website

Lieber Pascal, irgendwie erstellt das getWebView ihm keine WebView. Es kommt in der LogCat Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.littleusefulapps.bigscreenbrowseralpha.ObservableWebView.initializeWebViewSettings(android.webkit.WebView)' on a null object reference
at com.littleusefulapps.bigscreenbrowseralpha.MainActivity.onCreate(MainActivity.java:66)`

Dies lässt mich darauf schließen, dass die WebView in Fraggy nicht erstellt wird.. Hmmm.... Der Code ist unter OnCreate, testweise.

     FragmentTransaction ft = getFragmentManager().beginTransaction();
    fraggy frag = new fraggy();
    ft.replace(R.id.frameforweb, frag);
    ft.commit();
    final ObservableWebView mWebView;
    mWebView = frag.getWebView();
    mWebView.initializeWebViewSettings(mWebView);

Das ist mein Code. (initializeWebViewSettings ist eine Custom Method von meiner ObservableWebView)

— geändert am 17.01.2015, 12:04:31

Liebe Grüße, Rexxar :)
Moto Z Play Stock
Nvidia Shield Tablet K1
http://www.androidpit.de/forum/634540/allgemeines-faq-fuer-neulinge

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

17.01.2015, 12:06:24 via Website

Das liegt daran, dass diew View erst erstellt werden muss. D.h. du kannst erst auf die WebView zugreifen wenn das Fragment schon aktiv ist.
Also muss dein getWebView zu einem späteren Zeitpunkt ausgeführt werden.
Oder du schreibst dein Fragment um.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

17.01.2015, 12:35:47 via Website

Aktiv ist das Fragment sobald es angezeigt wird. und auch erst dann wird das Layout inflated und daraus kann man schliessen dass man auf die WebView erst zugreigen kann wenn das fragment aktiv ist, also später

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

17.01.2015, 13:16:26 via App

Wenn die variable mView != null ist ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten