Die Fehlermeldung besagt, das irgendwas (vermutlich mViewPager) null ist.
Und null.setAdapter(mSectionsPagerAdapter) funktioniert* meines Wissens ...
das dachte ich mir auch schon aber ich hab keine Ahnung warum der "null" sein sollte.
Die Fehlermeldung besagt, das irgendwas (vermutlich mViewPager) null ist.
Und null.setAdapter(mSectionsPagerAdapter) funktioniert* meines Wissens ...
das dachte ich mir auch schon aber ich hab keine Ahnung warum der "null" sein sollte.
Ich muss leider meine Idee hier wieder aufgreifen weil ich anders einfach nicht weiter komme.
Dazu eine relativ simple Frage: Das ganze mit der flexiblen UI funktioniert soweit, wenn ich die App auf Phone und Tablet teste.
Sobald ich nun meinen SectionsPagerAdapter (wir befinden uns in der MainActivity) einbauen lasse funktioniert die App nur noch auf dem Tablet.
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
fragment = new EingangSection();
break;
case 1:
fragment = new AusgangSection();
break;
case 2:
fragment = new SignalSection();
break;
default:
fragment = new EingangSection();
}
return fragment;
// getItem is called to instantiate the fragment for the given page.
// Return a PlaceholderFragment (defined as a static inner class below).
// return PlaceholderFragment.newInstance(position + 1);
}
@Override
public int getCount() {
// Show 3 total pages.
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
Locale l = Locale.getDefault();
switch (position) {
case 0:
return getString(R.string.title_section1).toUpperCase(l);
case 1:
return getString(R.string.title_section2).toUpperCase(l);
case 2:
return getString(R.string.title_section3).toUpperCase(l);
}
return null;
}
}
Alles anzeigen
Ich habe nun, wie auf dem Screenshot weiter oben zu sehen ist, beim Tablet 2 Fragmente nebeneinander (links ListFragment, rechts FragmentPagerAdapter)
Eingebaut wird das ganze hiermit...
public void makeSectionsPagerAdapter() {
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = null;
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
}
Alles anzeigen
Teste ich die App nun auf dem Phone schmiert mir die ganze Sache ab sobald ich auf ein Elemnt im ListFragment klicke, und zwar an dieser Stelle...
mit der Fehlermeldung...
02-24 12:46:27.392 2713-2713/com.example.paul_io I/Process﹕ Sending signal. PID: 2713 SIG: 9
02-24 12:59:48.182 2764-2764/com.example.paul_io D/AndroidRuntime﹕ Shutting down VM
02-24 12:59:48.182 2764-2764/com.example.paul_io W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xa4ca9b20)
02-24 12:59:48.186 2764-2764/com.example.paul_io E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.paul_io, PID: 2764
java.lang.NullPointerException
at com.example.paul_io.MainActivity.makeSectionsPagerAdapter(MainActivity.java:99)
at com.example.paul_io.MainActivity.onIoDeviceSelected(MainActivity.java:84)
at com.example.paul_io.IoDeviceFragment.onListItemClick(IoDeviceFragment.java:65)
at android.support.v4.app.ListFragment$2.onItemClick(ListFragment.java:58)
at android.widget.AdapterView.performItemClick(AdapterView.java:299)
at android.widget.AbsListView.performItemClick(AbsListView.java:1113)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:2911)
at android.widget.AbsListView$3.run(AbsListView.java:3645)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Alles anzeigen
Eigentlich sollte es doch für ein Fragment kein Problem sein einen FragmentPagerAdapter in den Adapter zu lade, oder?
Oder liegt das Problem am ViewPager?
WTF, da sieht man das Android um einiges kniffliger ist als Java für sich.
Ich
glaube ich werde mal überdenken ob ich so weiter machen werde.
Vermutlich werde ich mich aber erst ein bisschen besser einarbeiten
bevor ich dieses Projekt neu aufziehe.
ZitatAlles anzeigenDamit
verstößt Du einerseits gehörig gegen das MVC Pattern und andererseits
erhöht sich dann mit jedem Klick der Speicherverbrauch Deiner App.
UI
Elemente sind 'teuer' (in Bezug auf die zur Generierung notwendige
Systemleistung) und Du erstellst halt fröhlich mit jedem Klick einen
neuen ViewPager, der von support.v4.view abgeleitet ist und damit ein UI
Element darstellt.
Hm, das hört sich schon sehr nach Anfänger an
ZitatIch würde zunächst (ganz langweilig und trocken, weil man nix sieht)
einen ContentProvider für die angeschlossenen PBM erstellen.
soll das separat zu installieren sein? So als Schnittstelle zwischen PBM und den Apps?
Den Datenzugriff der einzelnen Fragmente hab ich noch nicht geregelt.
Es ist mir nur unverständlich da jedes mal wenn ich ein PBM aus der Liste wähle in Zeile 66 die Funktion makeSectionsPagerAdapter(position); aufgerufen wird.
Diese macht einen neuen SectionsPagerAdapter ( mit den genannten Fragmenten ) in ein vorhandenes Array an die Position <position> ( Zeile 193 ), und der mViewPager setzt den neu generierten SectionsPagerAdapter als Adapter.
Somit sollte zumindest bei jedem PBM in der Liste ein neu generierter SectionsPagerAdapter angezeigt werden, aber nicht mal das ist der Fall.
Wenn ich meinen Code durchschaue finde ich keinen Fehler weil für mich alles einen Sinn ergibt.
ok das klingt ja schon mal super, Danke.
Wie du auf meinem Screenshot von oben siehst ist es mir auch schon gelungen die Swipe-View auf das Fragment B zu legen, nur habe ich das Problem das keine neue Swipe-Area für jedes Element in der Liste von Fragment A generiert wird.
ein Beispiel: auf meinen Swipe Seiten (Eingang, Ausgang,...) sind viele Checkboxen zu sehen. Wähle ich nun aus der Liste "PBM One" und hake die ersten vier checkboxen auf der Swipe-Area an, bleiben diese ebenfalls aktiviert wenn ich auf "PBM Two" (oder ein anderes) wechsle .
Ich weiss etwas viel Quelltext aber hier mal meine MainActivity, in der ganz unten die Umschaltung der Swipe-Areas geregelt werden sollte. Vielleicht fällt jemandem ein Fehler auf.
package com.example.paul_io;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.Locale;
public class MainActivity extends FragmentActivity implements IoDeviceFragment.OnIoDeviceSelectedListener {
SectionsPagerAdapter[] mSectionsPagerAdapter;
ViewPager mViewPager;
Fragment fragment;
/**
* Called when the activity is first created.
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sites);
mSectionsPagerAdapter = new SectionsPagerAdapter[DataCollector.IoDevice.length];
// Check whether the activity is using the layout version with
// the fragment_container FrameLayout. If so, we must add the first fragment
if (findViewById(R.id.fragment_container) != null) {
// However, if we're being restored from a previous state,
// then we don't need to do anything and should return or else
// we could end up with overlapping fragments.
if (savedInstanceState != null) {
return;
}
// Create an instance of ExampleFragment
IoDeviceFragment firstFragment = new IoDeviceFragment();
// In case this activity was started with special instructions from an Intent,
// pass the Intent's extras to the fragment as arguments
firstFragment.setArguments(getIntent().getExtras());
// Add the fragment to the 'fragment_container' FrameLayout
getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, firstFragment).commit();
}
}
@Override
public void onIoDeviceSelected(int position) {
// The user selected the headline of an article from the HeadlinesFragment
// Capture the article fragment from the activity layout
SiteFragment siteFrag = (SiteFragment) getSupportFragmentManager().findFragmentById(R.id.site_fragment);
if (siteFrag != null) {
// If site frag is available, we're in two-pane layout...
// Call a method in the SiteFragment to update its content
makeSectionsPagerAdapter(position);
siteFrag.updateSiteView(position);
} else {
// If the frag is not available, we're in the one-pane layout and must swap frags...
// Create fragment and give it an argument for the selected article
SiteFragment newFragment = new SiteFragment();
Bundle args = new Bundle();
args.putInt(SiteFragment.ARG_POSITION, position);
newFragment.setArguments(args);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack so the user can navigate back
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
}
}
// #########################################################################################
/**
* A {@link android.support.v4.app.FragmentPagerAdapter} that returns a fragment corresponding to
* one of the sections/tabs/pages.
*/
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
fragment = new EingangSection();
break;
case 1:
fragment = new AusgangSection();
break;
case 2:
fragment = new SignalSection();
break;
default:
fragment = new EingangSection();
}
return fragment;
// getItem is called to instantiate the fragment for the given page.
// Return a PlaceholderFragment (defined as a static inner class below).
// return PlaceholderFragment.newInstance(position + 1);
}
@Override
public int getCount() {
// Show 3 total pages.
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
Locale l = Locale.getDefault();
switch (position) {
case 0:
return getString(R.string.title_section1).toUpperCase(l);
case 1:
return getString(R.string.title_section2).toUpperCase(l);
case 2:
return getString(R.string.title_section3).toUpperCase(l);
}
return null;
}
}
// #################### ####################
// #################### Eingang Section Fragment ####################
// #################### ####################
public static class EingangSection extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.eingang_section, container, false);
return rootView;
}
}
// #################### ####################
// #################### Ausgang Section Fragment ####################
// #################### ####################
public static class AusgangSection extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.ausgang_section, container, false);
return rootView;
}
}
// #################### ####################
// #################### Signale Section Fragment ####################
// #################### ####################
public static class SignalSection extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.signal_section, container, false);
return rootView;
}
}
public void makeSectionsPagerAdapter(int position) {
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
// Intent intent = new Intent(this, SwipeActivity.class);
// startActivity(intent);
mSectionsPagerAdapter[position] = new SectionsPagerAdapter(getSupportFragmentManager());
System.out.println(" ###################### Position: " + position);
// Set up the ViewPager with the sections adapter.
mViewPager = null;
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter[position]);
}
}
Alles anzeigen
Hey folks,
ich habe eine Vorlage für den Aufbau einer flexiblen grafischen Oberfläche in mein Projekt übernommen und würde nun gerne diese um eine Swipe funktion erweitern.
°°°Vorlage °°°
Damit ihr wisst wovon ich rede... Das Fragment B soll swipebar sein. In Fragment A gibt es eine Liste von Elementen die ausgewählt werden können. Nach dem auswählen eines Elements auf Fragment A erscheint auf Fragment B die swipebare Oberfläche.
hier sieht man es ganz gut. Links die Liste und rechts kann man zischen Eingang und Ausgang swipen[Blockierte Grafik: http://preview.slick.pics/FTl6EN4cX.png]
Ist es also möglich auch eine Activity anstelle eine Fragments am Platz von Fragment B anzeigen zu lassen? Ich weiss nämlich nur wie ich diese Swipe Funktion auf einer Activity baue.
Diese ganze Gescichte mit der flexiblen UI scheint ausschließlich auf Fragmenten zu basieren, stimmt das so?
lg proto
Ahhh ok, dann versuch ich mal mein Glück, Danke!
in Java kein Problem, aber wie sieht dann meine XML aus ? Bisher habe ich immer meine XML designed und dann diese Elemente mit Elementen in der dazugehörigen java Klasse verknüpft.
Aber ich kann meine XML ja nicht designen, weil ich ja festlegen muss wie viele checkboxen dort sein sollen, oder hast du mir ne Lösung meine XML dynamisch generieren zu lassen?
Die Checkboxen sind ein Feedback für digitale Ein- und Ausgänge, damit man sieht welcher Ein- Ausgang geschalten hat, und bei belieben ( und ausreichenden Berechtigungen ) kann man dann durch einen klick darauf einen aktivieren oder deaktivieren. Die ganzen Checkboxen werden natürlich noch übersichtlich gruppiert.
hey folks,
ich versuche ein neues Fragment bzw. Activity ( bin mir noch nicht gant sicher was ich benutzen soll ) zu erstellen, die eine variable Anzahl an Checkboxen anzeigen soll. Nur weiss ich überhaupt nicht wie das geht, und anscheinend hatte zuvor noch niemand vor so etwas zu machen, weil ich überhaupt nix dazu finde.
Ich möchte zwischen 16 und 128 checkboxen anzeigen die auch unterschiedliche Texte haben sollen.
Problem aus meiner Sicht ist, das ich die XML bevor ich sie benutze schon anlegen und gestalten muss, wie soll das nun variabel möglich sein???
EDIT: eine Idee die mir gerade kam ist eine ListView zu benutzen, was halten die Profis davon?
Eine ListView die je ein Element ( z.B. myCheckbox.xml ) anzeigt pro checkbox die ich haben möchte.
Vielleicht weiss ja jemand Rat.
über diesen Post bin ich auch schon gestolpert, allerdings gibt es bei mir keine derartige Option auszuwählen.
wer scrollen kann ist klar im Vorteil habs gefunden.
ZitatVergleiche http://stackoverflow.com/a/17314800
über diesen Post bin ich auch schon gestolpert, allerdings gibt es bei mir keine derartige Option auszuwählen.
Ich
habe nun nochmals ein gleichnamiges leeres Projekt erstellt und meine
.java .xml und Manifest hinein kopiert. Seltsamerweise funktioniert es
diesmal
muss beim ersten mal wohl was schief gelaufen sein. Allerdings wirds
das nicht gerade die feine englische Art sein ein Projekt von ADT nach
Android Studio zu konvertieren.
Du musst es also entweder komplett auf Gradle migrieren (eigentlich hätte Gradle darauf hinweisen müssen, dass es das so nicht bauen kann)
so etwas hätte ich erwartet. Entweder alles konvertieren und dann läufts oder eben mit Fehlermeldung...
Ich habe den "Sync Project with Gradle Files" natürlich zurvor auch schon versucht. Aber erst wenn ich den oben gezeigten Import hinzufüge, kennt er das "R"
nach dem hinzufügen von
und einem ausdrücklichen "Sync Project with Gradle Files" wird das "R" nun erkannt.
Seltesam ist nur das er nun keine meiner angegeben XML Files, ID´s oder Strings findet.
z.B.
R.string.noCar
R.id.impressum
R.layout.activity_main
die Dateien oder Strings befinden sich natürlich an der richtigen Stelle -> R.layout Beispielsweise..
hey folks,
ich habe ein laufendes ADT Projekt das ich gerne in Android Studio importieren möchte. Ich habe also bei Android Studio alle Projekte geschlossen und im "Welcome" Fenster habe ich unter "Quick Start" die Option "Import Non-Android Studio project" gewählt.
Danach den Pfad meines ADT Projekts angegeben und dem 'zu erstellenden Projekt' gleichen Projektnamen gegeben wie im ADT ( damit die Fehlerquellen minimiert werden ).
Die Importoptionen habe ich so belassen wie sie waren.
[Blockierte Grafik: http://i.slick.pics/FTYZF9qAI.png]
Nach dem import taucht in jeder Java Klasse der Fehler auf "Cannot find Symbol R" ...
Bevor ichs vergesse, Android Studio hat beim ersten import dieses ADT Projekts die passenden Packages für die API runtergeladen, in meinem Fall API-18.
Ich suche natürlich weiter nach einer Lösung aber freue mich auch über jede Idee eurerseits.
LG proto
p.s. hier die Imports meiner MainActivity, ich hatte mal den gleichen Fehler als ich das Projekt mit ADT entwickelt hab, damals habe ich irgendwas an den Imports hinzugefügt oder entfernt und alles war wieder in Ordnung. Ich vermute das es aber durch die geänderte IDE nicht wo einfach sein wird...
package com.example.carmanager;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.ListFragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.example.carmanager.db.DBAdapter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class MainActivity extends FragmentActivity
Alles anzeigen
Hey Leuts,
ist es denn eigentlich möglich alle oder fast alle Klassen eines Java Projekts in eine Android App zu übernehmen? Ich mache mir da Gedanken wegen des proprietären Teil des JRE / JDK.
Falls nicht, welche Klassen könnt ihr mir sagen die sicher nicht funktionieren werden.
LG
Hi Dr. Jack,
ich weiss ja nicht wie lange du schon Android Apps entwickelst, oder besser gesagt, wie lange du schon mit IDE arbeitest die diese Art von "zusammengeklicke" (Design-Funktion) deiner GUI zur Verfügung stellen.
Ich habe folgende Erfahrung gemacht... Füge ein paar Elemente ein und schau dir den Code an der generiert wird, dadurch lernst du welches Element mit welchen Funktionen (Methoden) [nenn es wie du willst], arbeitet. Lösche dden ganzen Kram wieder und schreibe den Code von Hand !
Es wird dir schon nach kurzer Zeit viel einfacher fallen deine Activities so zu gestalten wie du es dir vorstellst. Ich bin bei diesen "Design" Ansichten beinahe verzweifelt.
LG
p.s. gewöhne dir gleich an mit einem RelativLayout zu arbeiten, ich habe mich sozusagen durch alles durchgekämpft und bin beim RelativLayout verblieben.
falls du was kleines kompaktes brauchst, dann empfehle ich dir IrfanView oder Inkscape. Gibts beide als portable Version und grade für die Icons hab ich ganz gerne IrfanView genommen, da du spielend einfach die Größe in Pixel angeben kannst. Man braucht solche Icons ja eigentlich in einigen verschiedenen Größen. Beim speichern auch einfach den Alpha-Kanal auswählen und schon hast du einen Transparenten Hintergrund.
LG
komisch ist nur das ich das SDK gleich in D:\android\sdk installiert habe, doch der AVD Ordner war trotzdem in C:\Users\<username>\.android\avd
diese Struktur hab ich nun einfach auf D:\android kopiert und die Umgebungsvariable angelegt. Starte ich Android Studio, werden nun alle AVD´s korrekt angezeigt, und das SDK hat sich auch net beschwert.
siehste dachte ich doch, aber ich war mir nun gerade auch nicht mehr ganz sicher weil du sagtest das es geht...
Das mit den Zertifikaten wäre wirklich cool.
Hab es grade über eine Umgebungsvariable hin bekommen.
Name: ANDROID_SDK_HOME
Wert: D:\android\.....
Ja ein Testgerät wäre ganz schön, aber das wird wohl noch eine Weile dauern. Meine Technikerarbeit habe ich damals mit einem S4 entwickelt, geht wirklich viel besser als dieses Emulator Zeugs.