Beiträge von hottiwf
-
-
GEDULD IST EINE TUGEND!!!
Also ich hatte bisher nur angenommen, er würde nichts installieren und nichts tun. PUSTEKUCHEN! Nachdem ich die App jetzt mal per push auf die SD Karte geschoben habe und dabei schon gesehen habe, wie lange es dauert, hatte ich wohl bei der Installation nicht genugt Geduld. Habe allerdings jetzt mir eine FileManager.apk gezogen diese per adb install installiert und habe dann Facebook.apk im virtuellen Device über den Package Installer installiert.
Dies ging, denke auch adb install würde funktionieren (die fehlende FOrtschrittsanzeige -hatte mich etwas nervös gemacht) ES DAUERT NUR SEHR SEHR LANGE!
ALSO GEDULD!
-
Muss man eventuell im virtuellen Device irgend eine Option freigeben, damit man eine App installieren darf?
Habe App Installation von unbekannten Quellen schon zugelassen.Oder gibt es eine Möglichkeit die App auf die virtuelle SD Karte hochzuladen und die Facebook App dann vom
virtuellen Device zu installieren? -
Hi Leute,
ich hab mit das SDK für Android Eclipse von Facebook 3.7 installiert und die Samples etc. lassen sich auch ausführen.
Das einzige Problem was ich nun habe ist, dass ich die Facebook APK die im bin Ordner mit beiliegt auf meinem virtuellen
Device installieren möchte. Habe diese auch schon in den tools und in den platform-tools ordner verschoben bin per
Konsole da hin gewechselt und habe "adb install FBAndroid-5.0.apk" eingegeben und wollte so installieren. Irgendwas macht
adb auch aber leider kommt es NICHT zum Ende. Es kommt keine Fehlermeldung nichts, er abreitet einfach bis man selbst
irgendwann abbricht.Was mache ich falsch?
Habe Eclipse, den ABD und auch mein Windows schon neu gestartet, das virtuelle Device auch aber leider keine Besserung.
Hat Jemand einen Tip?
-
Zumindest hoffe ich, dass das so geht und das Referenzen auf 'menu' übergeben werden.
Häng seit Wochen in C fest und komm dementsprechend leicht mit den Konzepten durcheinander.ABER:
Wenn sich Deine Menüs lediglich von Activity zu Activity unterscheiden, dann ist der Ansatz mit mehreren XML Menüs plötzlich gar nicht mehr so blöd.
Es entfallen ja die dämlichen Switch-Anweisungen. (Ich ging von unterschiedlichen Menüeinträgen je ausgewählter Zeile ein und desselben ListViews aus.)
Hinzu kommt der Vorteil der einfachen Lokalisierung. Es ist wesentlich einfacher pro Sprache ein paar neue Menu_<details>.xml im passenden Unterordner zu erstellen als das Ganze im Code anzupassen.Du machst mich echt fertig ;-P
Okay! Bin jetzt konzeptionell wieder zurück gerudert und nehme unterschiedliche XML Files. Ich poste mal eine wenig Code wenn ich dann endlich
an einem Punkt bin wo die ersten grundlegenden Sachen funktionieren und ich wieder Rat braucheHab erstmal sau viel Dank für Deine ganzen Mühen! Denke mal der Schups mit dem contextual action mode
war schon gut. Ich bastel jetzt erstmal ein wenig (hoffe mal ein paar größere Schritte machen zu können) und dann melde ich mich
nochma.Erstmal vielen Dank!
-
Eine Klasse kann kein Interface sein. Sie kann nur ein Interface implementieren.
Dass Du keinen Konstruktor hast liegt daran, dass deine Elternklasse keinen Konstruktor braucht.
Das hindert Dich ja nicht daran einen zu erstellen.Habe nun einen angelegt, aber wenn ich den Konstruktor aufrufe wird im Debug nicht mehr onCreate aufgerufen und mein Menue entsprechend gar nicht mehr gesetzt.
Du kannst den Basic Krams durch eine eigene Subklasse ersetzen und darin herumfuhrwerken wie Du möchtest.
? Das hab ich nun gar nicht verstanden weil ich dachte der Basic Kram wäre schon meine Unterklasse :)!?!?!
Ich habe wirklich absolut keine Ahnung was das werden soll…
ALSOOOoooo....was ich eigentlich möchte....ich möchte ein java File haben in dem ich eine Klasse Basic habe. Diese Klasse implementiert das Interface
android.widget.AbsListView.MultiChoiceModeListener. In dieser Klasse möchhte ich die komplette Menue Erstellung bzw das handling realisieren.Auch weiß ich nicht, wie Du es schaffen möchtest je nach ausgewähltem Element unterschiedliche Menüeinträge zu präsentieren.
NEIN nein...ich möchte nur beim Erstellen das Menu dynamisch gestalten. Sprich es soll wie folgt sein.
Activity1 ruft new Basic(menu1) auf
Activity2 ruft new Basic(menu2) auf
jetzt unterscheidet sich menu1 in dem Fall, dass es zum Beispiel keinen share Button hat.Also ich möchte ein dynamisches Menue je entsprechend pro Activity oder besser gesagt pro ListView der jeweiligen Activity.
Es kann sein, dass ich absolut auf dem Holzweg bin...vom Konzept her. Aber wir waren uns ja eigentlich einig, dass X belieb viele Menues unter den Resourcen zu erstellen Humbuk wäre....`!?!?
-
Super! Das hat mir erstmal echt weitergeholfen.
Hätte jedoch gern noch die Möglichkeit der MethodeonCreateActionMode(ActionMode mode, Menu menu)
irgendwie ein weiteres Argument uebergeben zu koennen? Also quasi eine Liste welche Buttons in dem Menue aktiviert sein
sollen, oder ein int Wert welches Menue ich aktivieren will oder so? Haettest Du da einen Tip?Hatte mir überlegt in meiner Klasse eine statische Variable anzulegen die ich MenueArt nenne und die ich im KOnstruktor setze...nun hab ich ja aufgrund des implements android.widget.AbsListView.MultiChoiceModeListener
eine Klasse die ein Interface ist und somit keinen Konstruktor in dem Sinne hat. Rufe das Ganze nämlich so auf:theListView = (ListView) findViewById(R.id.list);
theListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
theListView.setMultiChoiceModeListener(new Basic());hätte jetzt gern so was wie die Möglichkeit:
new Basic(int menue1);
new Basic(int menue2);
new Basic(int menue3);oder
new Basic(int[] buttonIDs);
oder Ähnliches......
Verstehst Du was ich will ???
-
Hi,
so ich bin nun so weit und habe fast alles umgestrickt und benutze nun einen
android.widget.AbsListView.MultiChoiceModeListenerpublic boolean onCreateActionMode(ActionMode mode, Menu menu)
{
// Inflate the menu for the CAB
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
return true;
}Jetzt meine Frage zum Thema Menue und dynamisch. Kann ich anstatt R.menu.context_menu ein dynamisches Menü per Java Code
erstellen? Und wie rufe ich dann am Besten die CreateActionMode Methode auf? Da es sich um ein Interface handelt kann ich ja nicht einfach statische
Methoden implementieren, die mir eine entsprechend dynamische Instanz zurückgeben oder doch? -
Auf gar keinen Fall. Das ist totaler Blödsinn.
Wobei einige Implementierungen in der Tat nach einem langen Anklicken ihre Toolbar anpassen. Man muss abwarten, ob das die Zukunft wird. Ich bin ein Freund von Kontextmenüs.Jedenfalls werden Kontextmenüs und Kontext-Actionbars in einem Android Guide beschrieben.
Ah, erst einmal Danke! Bin jetzt umgeschwenkt zu
Using the contextual action mode
Finde das auch schicker, mal sehen ob ich das "Standard" alte Context Menue (Creating a floating context menu
) für Api kleiner 11 noch unterstütze. Das unterscheidet sich ja auch (vom Aussehen) sehr gering zu meinem AlertDialog den ich bisher
realisiert habe. Mal sehen wie ich das Ganze hinbekomme. Werde bestimmt nochmal nerven (müssen) -
Moin.
Also ich bin ja nach wie vor ein Freund von 'Machs wie Dein OS' und würde an Stelle eines eigenen Dialogs die Menüs benutzen.
Da könnte man dann ziemlich simpel Einträge hinzufügen, löschen oder austauschen.Hi!
Also Du würdest die Einträge in der Liste bei anklicken als makiert setzen und dann unten im Menü die entsprechenden Optionen anzeigen? Oder
in der ActionBar? Ist es so unüblich bei längerem drücken auf ein List Element ein PopUp Dialog erscheinen zu lassen? Hatte eigentlich so im Gefühl, dass ziemlich viele Apps das so machen!?
Alternativ ließe sich je Dialog eine XML-Datei anlegen und eine eigene Handler Klasse basteln. Ist natürlich ein bisschen mühsam immer den Handler umzuschreiben…Java
Alles anzeigenswitch(position) { case 0: AllButtonsDialogHandler handler = new AllButtonsDialogHandler(); break; case 1: DeleteDialogHandler handler = new DeleteDialogHandler(); break; default: SynchronizeDialogHandler handler = new SynchronizeDialogHandler(); break; }
Da tippt man sich ja tot und es sieht auch noch scheiße aus.Sehe ich genauso, wollte das auf keinen Fall so machen!
Da Du ja gern herumvererben möchtest wäre doch so etwas eine Alternative:Java
Alles anzeigenMyButtonsHandler handler; switch(position) { case 0: handler = MyButtonsHandler.getInstance(MBH_ALL_BUTTONS_HANDLER); break; case 1: handler = MyButtonsHandler.getInstance(MBH_DELETE_BUTTON_HANDLER); break; default: handler = MyButtonsHandler.getInstance(MBH_SYNCHRONZIE_BUTTON_HANDLER); break; }
Im Prinzip also ein Anwendungsbeispiel des Static Factory Pattern.
Habe jetzt eine Klasse. Also meinen Basic Dialog und da die statische Methode > getInstance implementiert.
Dieser uebergebe ich entsprechend welcher Dialog erstellt werden soll und diese liefert mir entsprechend das
Objekt so wie ich es haben möchte.
Von einer All-In-One Lösung mit Ausblenden nicht benötigter Elemente rate ich Dir ab.
Das wird unglaublich unübersichtlich und unsagbar schwer anzupassen.Denke da es maximal 10 unterschiedliche Buttons geben wird, ist es noch handlebar. Ich wollte jetzt nicht für jeden
Dialog der gesamten App eine SuperDialogHandlerKlasse bauenWerde gleich mal weiter proggen und mich bestimmt hier nochmal zu Wort melden, weil so ganz Licht am Ende des Tunnels seh
ich noch nicht -
Hi,
ich hab eine Frage zum Thema Dialoge.
Ich habe eine App in der ich ein paar unterschiedliche ListViews habe. Bei langem oder einfachem Click auf die einzelnen Elmente
soll sich jetzt ein custom Dialog öffnen, der zum Beispiel einmal die Buttons: Delete, Update, Show enthält, ein anderes Icon soll aber
im Dialog nur Delete anbieten, bei einem anderen dann wieder Update, Teilen etc.Also es soll quasi immer der "gleiche" Dialog sein, der aber je nach Item eine bestimmte Kombination von Buttons enthält.
Nun meine Frage zum Konzept....
wie genau würdet Ihr das bewerkstelligen?Die simpelste Lösung wäre ja für jeden Dialog eine eigene XML Datei und eine eigene Handler Klasse anzulegen.
Aber ist das der Weisheit letzter Schluß? Gibt es da eine elegantere Lösung?Hatte so an Sachen gedacht wie Vererbung aber das ist ja bei XML Dateien so nicht möglich?! Dann bin ich über den Begriff imports gestoßen.
Hatte dann gedacht ich mache eine XML Datei mit ALLEN möglichen Buttons und blende je nach HandlerKlasse entsprechende Buttons aus....habe das aber mit setVisibility irgendwie nicht recht hinbekommen und meine Frage wäre dann, sind die Buttons dann auch noch richtig angeordnet oder an der Stelle wo der Button eigentlich wäre eine leere Stelle?
Gruß Marcel
-
Hi Leute,
ich habe eine FragmentActivity in der ich mehrere Fragmente habe. Logisch!
Ich hätte jetzt gerne, dass wenn ich den Titel des Fragmentes anklicke, ich in eine onListenerMethode lande,
bzw. möchte ich dann eine andere Activity aufrufen. Ich hab schon versucht alle möglichen Sachen an meinen
FragmentStatePagerAdapter drannzuhängen.Zum Beispiel:
public class SectionsPagerAdapter extends FragmentStatePagerAdapter implements android.content.DialogInterface.OnClickListenerAber egal was ich per implements raussuche nichts funktioniert. Hat Jemand einen Tip?
Oder muss ich das Ganze auf die FragmentActivity hochziehen? Hab ich aber eigentlich auch schon probiert......Wäre für einen Schups in die richtige Richtung echt dankbar.
Grüße!
-
War gestern etwas spät, habe aber noch Folgendes ausprobiert.
Habe mal im Emulator AVD die Kamera emuliert / aktiviert und den Test diesmal mit der Kamera App wiederholt. Wie bereits geschrieben, habe ich immer
nur Dateimangaer oder die Gallery als bildliefernde App benutzt, weil ich gelesen hatte, dass die Kamera App emuliert manchmal spinnt. TJA WAS SOLL ICH SAGEN..... diese funktioniert aber tadelos! Es wird das Bild zurückgegeben und an entsprechende Stelle gespeichert genauso wie ich es haben möchte.Unterstützt die Gallery App nicht MediaStore.EXTRA_OUTPUT ? Muss ich also doch komplett gesondert auf unterschiedliche Apps reagieren? Dachte ich habs schön einfach und sage in Android einfach egal welche App ein Bild zurückliefern kann, gebe ich in einer Liste aus und egal welches ich davon auswähle brauch ich nur als Reaktion:
Uri outputFileUri = Uri.fromFile(photoFile);
data.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);aufrufen und muss mich um nichts weiteres kümmern Zu einfach gedacht was ???
-
Soweit ich das sehe, muss nach http://developer.android.com/guide/topics/media/camera.html
Das Output Extra mit dem Intent übergeben werden.
Dann sollte er nicht nur die Datei anlegenAlso ich habe das jetzt so verstanden, dass ich das output extra bevor ich den intent aufrufe, erst einmal auf den intent packen muss.
Hoffe das hab ich richtig interpretiert. Habe nun meine Methoden folgendermaßen umgeschrieben:Im onActivityResult ist nun nur noch erstmal der AbfrageCode drinn und zum Test wenn alles gut geht ein setzen eines int Wertes zum Debuggen.
Java
Alles anzeigenprotected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 55) { if (resultCode == RESULT_OK && data != null) { int uuuuu=0; } } }
in meiner Methoden zum Aufbau des Dialoges ist nun das Erstellen des TEMP FIles und die Ubergabe per output extra an
das aufzurufene intent. Ich hoffe ich hab das so richtig verstanden!?Java
Alles anzeigenprivate static void openDialog( final Activity context, final List<Intent> intents, List<ResolveInfo> activitiesInfo) { AlertDialog.Builder dialog = new AlertDialog.Builder(context); dialog.setTitle("select an action"); dialog.setAdapter( buildAdapter(context, activitiesInfo), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { Intent intent = intents.get(id); File photoFile = null; try { photoFile = ImagePickUpUtil.createImageFile(context); if (photoFile != null) { Uri outputFileUri = Uri.fromFile(photoFile); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); } } catch (IOException ex) { } context.startActivityForResult(intent, 55); } });
Denn nun kommt er nicht mehr in der onActivityResult Methode über das if:
if (resultCode == RESULT_OK && data != null)
hinaus. Also irgendwas schein ich da entweder falsch verstanden zu haben oder ich habe jetzt einen anderen Fehler!? -
Nabend Leute, ich bin es schon wieder
Habe diesmal das Problem dass ich aus meiner APP eine andere APP aufrufe, welche mir als Result ein Bild zurückgeben soll, welches ich dann auf meine SD Karte in den privaten Bereich meiner APP speichern will.
1. ich erstelle eine Liste aller möglichen Apps die ein Bild zurückgeben können
2. Beim Anklicken einer der Apps wird diese gestartet und mit dem Code 55 versehen.
Habe hierfür als Test immer erst mal die Gallery benutzt.
3. Nachdem das Bild ausgewählt wurde, komme ich in die Methode onActivityResult wo die Funktion aufgerufen wird, mit der auf der SD Card ein File anlegt wird, in welches ich die ausgewählte Datei gespeichert werden soll.Bis hier hin funktioniert noch alles ohne Probleme.
An der Stelle
Uri outputFileUri = Uri.fromFile(photoFile);
data.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);wo die zurückgegebene Datei dann per putExtra in das File geschrieben werden soll, passiert dann aber gar nichts.
Die Datei existiert auf der SD Card im entsprechendem Verzeichnis ist jedoch 0 kb groß -also leer.Habe auch schon debuggt:
outputFileUri
file:///storage/sdcard/Android/data/de.hotti.myapp/files/JPEG_19691231_190000_656819955.jpgdata
Intent { dat=content://media/external/images/media/78 (has extras) }Hat irgendwer einen Ratschlag. Ich habs mir auch echt nicht einfach gemacht, hab schon dutzende Code Snipets probiert und wirklich viel gelesen, aber irgendwie komme ich den entscheidenen Schritt einfach nicht weiter....
Hier meine Permissions:
Code<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" android:required="false" />
Hier mein Code dazu:
onActivityResult
Java
Alles anzeigenprotected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 55) { if (resultCode == RESULT_OK && data != null) { File photoFile = null; try { photoFile = ImagePickUpUtil.createImageFile(this); if (photoFile != null) { Uri outputFileUri = Uri.fromFile(photoFile); data.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); } } catch (IOException ex) { } } } }
Klasse ImagePickUpUtil
Java
Alles anzeigenpublic class ImagePickUpUtil { /** * Detect the available intent and open a new dialog. * @param context */ public static void openMediaSelector(Activity context) { Intent camIntent = new Intent("android.media.action.IMAGE_CAPTURE"); Intent gallIntent = new Intent(Intent.ACTION_GET_CONTENT); gallIntent.setType("image/*"); // look for available intents List<ResolveInfo> info = new ArrayList<ResolveInfo>(); List<Intent> yourIntentsList = new ArrayList<Intent>(); PackageManager packageManager = context.getPackageManager(); List<ResolveInfo> listCam = packageManager.queryIntentActivities(camIntent, 0); for (ResolveInfo res : listCam) { final Intent finalIntent = new Intent(camIntent); finalIntent.setComponent(new ComponentName( res.activityInfo.packageName, res.activityInfo.name)); yourIntentsList.add(finalIntent); info.add(res); } List<ResolveInfo> listGall = packageManager.queryIntentActivities(gallIntent, 0); for (ResolveInfo res : listGall) { final Intent finalIntent = new Intent(gallIntent); finalIntent.setComponent(new ComponentName( res.activityInfo.packageName, res.activityInfo.name)); yourIntentsList.add(finalIntent); info.add(res); } // show available intents openDialog(context, yourIntentsList, info); } private static void openDialog( final Activity context, final List<Intent> intents, List<ResolveInfo> activitiesInfo) { AlertDialog.Builder dialog = new AlertDialog.Builder(context); dialog.setTitle("select an action"); dialog.setAdapter( buildAdapter(context, activitiesInfo), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { Intent intent = intents.get(id); context.startActivityForResult(intent, 55); } }); dialog.setNeutralButton( "cancel", new android.content.DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); dialog.show(); } /** * Build the list of items to show using the intent_listview_row layout. * @param context * @param activitiesInfo * @return */ private static ArrayAdapter<ResolveInfo> buildAdapter( final Context context, final List<ResolveInfo> activitiesInfo) { return new ArrayAdapter<ResolveInfo>( context, R.layout._list_row, R.id.title, activitiesInfo) { @Override public View getView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); ResolveInfo res = activitiesInfo.get(position); ImageView image = (ImageView) view.findViewById(R.id.list_image); image.setImageDrawable(res.loadIcon(context.getPackageManager())); TextView textview = (TextView) view.findViewById(R.id.title); textview.setText(res.loadLabel(context.getPackageManager()).toString()); return view; } }; } static String mCurrentPhotoPath; public static File createImageFile(Context context) throws IOException { // Create an image file name String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date(0)); String imageFileName = "JPEG_" + timeStamp + "_"; String sState = Environment.getExternalStorageState(); File storageDir = context.getExternalFilesDir(null); File sState2 = context.getFilesDir(); File image = null; try { image = File.createTempFile(imageFileName, /* prefix */ ".jpg", /* suffix */ storageDir /* directory */); // Save a file: path for use with ACTION_VIEW intents mCurrentPhotoPath = "file:" + image.getAbsolutePath(); } catch (IOException e) { e.printStackTrace(); } return image; }
-
Hehe - und danke für die Aufklärung, so muss sich jetzt keiner mehr nen Kopf machen
Bin ich froh, das die Ursache am geposteten Sourcecode nicht erkennbar war
Ja das nächste Mal sollte ich glaub ich mal den gesamten Code posten. Danke erstmal an ALLE die sich für mich den Kopf zerbrochen haben und versucht haben mir zu helfen! DANKE -
Oh Gott! Nach einem Tag wirklich extremster Kopfschmerzen hab ich es eben gefunden!!!
list.setAdapter(adapter);
ich hatte list nicht in meinem SectionFragment als variable definiert sondern direkt in der FragmentActivity und das auch noch statisch.
Somit hat er wohl nur beim wirklich zerstören der gesamten Activity eine Änderung erkannt. KUNSTSTÜCK!Nun geht es erst einmal so wie ich es möchte.
-
Ich würde normalerweise (wie mein Vorredner) einen CursorAdapter für sowas verwenden;
wenn ich einen Custom-Adapter verwende (wie du in deinem Code), dann verwende ich adapter.notifyDataSetChanged() für den Fall, das sich Daten geändert haben.
Im Falle des Löschens würde ich dem Adapter eine delete() Funktion spendieren, die das entsprechende Item aus der internen Datenstruktur entfernt und abschließend das notify... ausführt (die Datenbankabfrage erneut auszuführen mag für ein paar Datensätze OK sein, aber was wenn deine Tabelle mal mehrere 1000 Einträge hat?)Ich habe eben nochmal versucht mit notify ein ReDraw zu erzwingen, aber auch hier Fehlanzeige! War nämlich auch der Meinung das ein setAdapter das erzwingt und wollte das quasi als harte Lösung erstmal so drinn lassen....Ich glaube ich bau das mal alles auf CursorAdapter um und zerpflücke nochmal alles.
Allerdings sollte deine Methode (neuen Adapter setzen) auf den ersten Blick eigentlich auch funktionieren, da das setAdapter() die Liste eigentlich auch zum Redraw animiert...
Ist es sicher, das der neue Adapter den überzähligen Datensatz nicht mehr enthält (per Debugger oder Log.d() geprüft)?Habe dazu mal 3 Bilder angefügt. Wie gesagt ich bin der Meinung mit den Daten und dem Adapter ist alles io. Vielleicht sieht ja an meinen
Screenshots irgendwer hier noch etwas, was ich nicht sehe.Bild 1 (debug1.png) zeigt den Inhalt des gesetzten Adapters auf meiner ListView vor dem delete.
Bild 2 (debug2.png) zeigt den Adapter der auf die ListView gesetzt werden soll.
Bild 3 (debug3.png) ziegt nun den Inahlt nach dem setzen des neuen Adapters.Deine getView() Methode solltest du in jedem Fall noch mal überarbeiten
Der convertVew wird nicht aus Spaß übergeben, sondern damit man ihn wiederverwendet, und für jedes Item erneut einen Font zu laden (immer wieder, dank des ignorierten convertView) ist sicher auch nicht die effizienteste Art, mit den Resourcen umzugehen.KEINE FRAGE! Um Gottes Willen. Mir war es auch ein wenig peinlich, meinen Code den ich bisher habe zu posten, da dort viel zusammen kopierter
Mist ist um überhaupt erst einmal einen Einstieg zu finden. Bin erst seit 2 Wochen auf Apps/Java. Habe Java mal vor 10 Jahren in der Ausbildung
gehabt und mache eher C#, C++ und Desktop Anwendungen. Finde aber die App Geschichte und gerade Android/Google sehr spannend! Aber da muss ich
noch sehr viel optimieren. -
Es ist wahrscheinlich nicht so kompliziert.
In der class für das Fragment ( extends ListFragment ) wirst du ja wahrscheinlich über eine SimpleCursorAdapter die Liste anzeigen lassen. Diesen Code am besten in eigenen Routine speichern. Hast du ja vielleicht schon?
Ich nenne sie dann z.Bsp.
Jetzt musst du nur noch nach dem löschen diese Routine aufrufen.Ich hoffe es klappt
Hi,
ich habe den Code mit meinem Adapter in einer eigenen Routine: UpdateFragment()
Ich rufe die Routine nach dem Löschen auf. Mein Problem bleibt aber bestehen, dass die Daten erst aktualisiert in der ListView dargestellt werden, wenn ich zwei mal nach rechts und wieder zurück wische. Alternative geht natürlich auch mit dem Home Button wieder in die vorige Activity zu gehen und die Activity "ZeigListe" neu aufzurufen. Bei einem NeuAufruf der Activity ist natürlich auch alles schick. Auch wenn ich nach meinem Löschen der Daten die
Activity Liste zerstöre und mit Intent neu aufrufe ist alles ok. Blos das sollte ja nicht der Weg sein -ausserdem siehts scheisse aus wenn sich die Liste so komplett neu aufbaut.Ich muss doch dem ListView ganz einfach sagen können, jetzt aktualisiere Dich doch komplett einmal neu. Den Adapter mit den neuen Daten hab ich ja in meiner Methode: updateFragment der ListView schon zugewiesen.
-
Meiner Meinung nach lieferst du zu wenig Fakten für eine seriöse Hilfestellung.
Welche Art Adapter wird verwendet?
Wie sieht dein Lösch-Code aus?...um nur mal die erstbesten Fragen zu nennen, die sich dem uneingeweihten Leser stellen
Die "zwei Seiten" Beobachtung wird sich vermutlich mit Caching erklären lassen.
Hi,
also hier erst einmal mein Adapter:Java
Alles anzeigenpublic class MyAdapterListViewEvents extends BaseAdapter { private FragmentActivity fragmentActivity; private ArrayList<HashMap<String, String>> data; private static LayoutInflater inflater = null; public ImageLoader imageLoader; public MyAdapterListViewEvents(FragmentActivity a, ArrayList<HashMap<String, String>> d) { fragmentActivity = a; data = d; inflater = (LayoutInflater) fragmentActivity .getSystemService(Context.LAYOUT_INFLATER_SERVICE); imageLoader = new ImageLoader(fragmentActivity.getApplicationContext()); } public int getCount() { return data.size(); } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { View vi = convertView; vi = inflater.inflate(R.layout.list_row_boy, null); TextView title = (TextView) vi.findViewById(R.id.title); // title TextView artist = (TextView) vi.findViewById(R.id.artist); // artist // name TextView day = (TextView) vi.findViewById(R.id.day); // Tag TextView time = (TextView) vi.findViewById(R.id.time); // Uhrzeit ImageView thumb_image = (ImageView) vi.findViewById(R.id.list_image); // thumb HashMap<String, String> song = new HashMap<String, String>(); song = data.get(position); // Setting all values in listview title.setText(song.get(MainActivityWithSwipe.KEY_TITLE)); artist.setText(song.get(MainActivityWithSwipe.KEY_ARTIST)); day.setText(song.get(MainActivityWithSwipe.KEY_DAY)); time.setText(song.get(MainActivityWithSwipe.KEY_TIME)); Typeface tf = Typeface.createFromAsset( parent.getContext().getAssets(), "fonts/baby2.ttf"); title.setTypeface(tf); imageLoader.DisplayImage("/storage/sdcard/pictures/test.jpg", thumb_image); return vi; } }
Dann meine Methoden um die Daten zu löschen
Java
Alles anzeigen// Loeschen der Daten aus der Datenbank myDBHandler.deleteEvent(theEvent); UpdateFragment(); v.postInvalidate(); private void UpdateFragment() { ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); List<Event> events = new ArrayList<Event>(); int iSectionNummer = (Integer)this.getArguments().get(ARG_SECTION_NUMBER); String sKategorieName = (String)this.getArguments().get(ARG_SECTION_NAME); int iCatId = myDBHandler.getCategoryId(sKategorieName); if(iSectionNummer == 1) events = myDBHandler.getAllEvents(); else events = myDBHandler.getEventsOfCategory(iCatId); for (Event ev : events) { HashMap<String, String> map = new HashMap<String, String>(); map.put(KEY_TITLE, ev.getTitle().toString()); map.put(KEY_ARTIST, ev.getDesription().toString()); map.put(KEY_DAY, ev.getDay().toString()); map.put(KEY_TIME, ev.getTime().toString()); map.put(KEY_THUMB_URL, "thumb.jpg"); map.put(KEY_BGCOLOR, myDBHandler .getCategory(ev.getCatId()) .getBGColor()); songsList.add(map); } adapter = new MyAdapterListViewEvents(this.getActivity(), songsList); list.setAdapter(adapter); }