Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

Context-Menü on TableRow

Das Thema "Context-Menü on TableRow" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 05.10.2011, 22:49   #1 (permalink)
Neuer Benutzer

Registriert seit: 05.10.2011
Beiträge: 13
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard Context-Menü on TableRow

Hey Leute,

ich versuche gerade verzweifelt ein Context-Menü in meinem TableLayout zu implementieren. Ich füge dynamisch in mein TableLayout einige TableRows hinzu und "registiere" diese für Context-Menüs.
Code:
final TableRow listRow = (TableRow) inflater.inflate(R.layout.suggestion_list_item, null);
....
registerForContextMenu(listRow);
Anschließend überschreibe ich die Methoden onCreateContextMenu und onContextItemSelected.

Code:
@Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater_menu = getMenuInflater();
        inflater_menu.inflate(R.menu.context_suggestion, menu);
        menu.setHeaderTitle(R.string.options);
    }
Dies funktioniert bis dahin auch alles sehr gut, und wenn ich eine TableRow länger gedrückt halte, bekomme ich mein gewünschtes Context-Menü. Hier die xml dazu:
Code:
<?xml version="1.0" encoding="utf-8"?>
<menu
  xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:id="@+id/edit"
          android:title="@string/edit" />
    <item android:id="@+id/delete"
          android:title="@string/delete" />
</menu>
Aber bereits in der onCreateContextMenu-Methode ist der Parameter menuInfo null. In der onContextItemSelected-Methode entsprechend auch. Nun die Frage: wie kriege ich beim Klick auf einen Context-Menüpunkt heraus, von welcher TableRow das Context-Menü geöffnet wurde?

Ich hoffe mir kann jemand helfen und ich hoffe ich habe alle nötigen und relevanten Code-Ausschnitte eingefügt.

Schönen Abend
Christoph
witschi87 ist offline   Mit Zitat antworten
Alt 06.10.2011, 11:06   #2 (permalink)
Fortgeschrittenes Mitglied

Modell: HTC Sensation

Registriert seit: 31.08.2011
Beiträge: 390
Abgegebene Danke: 25
Erhielt 59 Danke für 57 Beiträge
Standard AW: Context-Menü on TableRow

Hängen deine TableRows in einer ListView? Wenn ja, registrier mal die ListView für Context-Menüs, so hab ich es jedenfalls bei mir realisiert und das funktioniert.
Tom299 ist offline   Mit Zitat antworten
Alt 06.10.2011, 14:26   #3 (permalink)
Neuer Benutzer

Registriert seit: 05.10.2011
Beiträge: 13
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard AW: Context-Menü on TableRow

Nein, die TableRows hängen in einem TableLayout. Wenn ich zusätzlich das TableLayout für das ContextMenü registriere, habe ich ein doppeltes Menü. Also Header, Bearbeiten, Löschen, Bearbeiten, Löschen. Aber auch da ist auf Druck aller Menüpunkt menuInfo NULL.
Hier mal meine Layouts:

meeting_view.xml:
Code:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView android:id="@+id/scrollView1" android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent">
<LinearLayout
  android:layout_width="match_parent"
  android:orientation="vertical" android:layout_height="wrap_content">
    <LinearLayout
      android:layout_width="match_parent"
      android:orientation="vertical" android:layout_height="wrap_content">
        <TextView android:id="@+id/meetingTitle" android:layout_height="wrap_content" android:text="TextView" android:layout_width="match_parent" android:gravity="center_horizontal" android:shadowColor="#f00" android:shadowRadius="3"></TextView>
        <TableLayout android:id="@+id/list_suggestions" android:layout_height="wrap_content" android:layout_width="match_parent" android:stretchColumns="*"></TableLayout>
    </LinearLayout>
    <LinearLayout
      android:layout_width="match_parent"
      android:orientation="vertical" android:layout_height="wrap_content">
        <TextView android:id="@+id/commentsTitle" android:layout_height="wrap_content" android:text="@string/comments" android:layout_width="match_parent" android:gravity="center_horizontal" android:shadowColor="#f00" android:shadowRadius="3"></TextView>
        <TableLayout android:id="@+id/list_comments" android:layout_height="wrap_content" android:layout_width="match_parent"></TableLayout>
    </LinearLayout>
</LinearLayout>
</ScrollView>
suggestion_list_item.xml:
Code:
<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/suggestionRow" android:layout_height="wrap_content" android:layout_width="match_parent" android:longClickable="true">
    <LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="wrap_content">
        <LinearLayout android:id="@+id/linearLayout2" android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="wrap_content">
            <ToggleButton android:background="@drawable/picked_button" android:id="@+id/pickedButton" android:layout_height="35dip" android:layout_width="35dip" android:textOn="" android:textOff="" android:layout_marginLeft="15dip" android:layout_marginRight="15dip" android:layout_marginTop="5dip" android:layout_marginBottom="5dip"></ToggleButton>
               <TextView android:text="TextView" android:id="@+id/suggestion_list_item_date" android:layout_height="wrap_content" android:layout_width="wrap_content" android:maxWidth="100dip" android:layout_gravity="center_vertical"></TextView>
            <RadioGroup android:layout_height="wrap_content" android:id="@+id/voteButtons" android:orientation="horizontal" android:gravity="right" android:layout_width="match_parent" android:layout_gravity="right|center_vertical">
                <RadioButton android:background="@drawable/vote_no_button" android:id="@+id/voteNoButton" android:layout_width="35dip" android:layout_height="35dip"></RadioButton>
                <RadioButton android:background="@drawable/vote_maybe_button" android:id="@+id/voteMaybeButton" android:layout_width="35dip" android:layout_height="35dip" android:layout_marginLeft="15dip"></RadioButton>
                <RadioButton android:background="@drawable/vote_yes_button" android:id="@+id/voteYesButton" android:layout_width="35dip" android:layout_height="35dip" android:layout_marginLeft="15dip" android:layout_marginRight="15dip"></RadioButton>
            </RadioGroup>
        </LinearLayout>
        
        <LinearLayout android:id="@+id/voteBar" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="center_horizontal" android:background="@drawable/shape">
            <TextView android:id="@+id/voteBarRed" android:layout_height="10dip" android:background="#f00" android:layout_width="wrap_content"></TextView>
            <TextView android:id="@+id/voteBarYellow" android:layout_height="10dip" android:background="#ff0" android:layout_width="wrap_content"></TextView>
            <TextView android:id="@+id/voteBarGreen" android:layout_height="10dip" android:background="#0f0" android:layout_width="wrap_content"></TextView>
            <TextView android:id="@+id/voteBarGrey" android:layout_height="10dip" android:background="#ccc" android:layout_width="wrap_content"></TextView>
        </LinearLayout>
        <TextView android:id="@+id/seperator" android:layout_height="1dip" android:background="#333" android:layout_width="match_parent" android:layout_marginTop="5dip"></TextView>
    </LinearLayout>
</TableRow>
Ich möchte damit halt bewirken, dass ich quasi zwei Listen untereinander habe. In diesem speziellen Fall zuerst die "Suggestions", gefolgt von den Kommentaren - jeweils mit Titelzeile (TextView). Damit das ganze dann Scrollbar wird ist alles in einer ScrollView. Mit einer ListView kriege ich dieses Vorhaben leider nicht realisiert, weil ListViews in ScrollViews nicht funktionieren und auch wenig Sinn machen.
Aber laut Doku ist es möglich für jede View ein ContextMenü zu erstellen. Und eine TableRow ist ja auch nur eine View. Deswegen verstehe ich einfach nicht wo der Fehler ist...
Sonst Ideen? :/
witschi87 ist offline   Mit Zitat antworten
Alt 07.10.2011, 08:21   #4 (permalink)
Neuer Benutzer

Registriert seit: 05.10.2011
Beiträge: 13
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard AW: Context-Menü on TableRow

Keine eine Idee? Vielleicht ist ein TableLayout nicht die richtige Lösung? Ich habe mal mein Mockup hochgeladen, um anzudeuten, was ich realisieren möchte. Dabei soll es sowohl auf den Terminvorschlägen im oberen Teil, als auch auf den Kommentaren im unteren Teil ein Context-Menü geben...
Miniaturansicht angehängter Grafiken
Context-Menü on TableRow-meetingansicht.png  
witschi87 ist offline   Mit Zitat antworten
Alt 07.10.2011, 08:27   #5 (permalink)
Junior Mitglied

Registriert seit: 06.09.2011
Beiträge: 38
Abgegebene Danke: 2
Erhielt 5 Danke für 5 Beiträge
Standard AW: Context-Menü on TableRow

Gratis E-Book: Android - Download - CHIP Online

in dem Buch steht´s beschrieben wie man ein Context Menu baut evtl. hilft dir das ja weiter

MfG nijoX
nijoX ist offline   Mit Zitat antworten
Alt 07.10.2011, 10:43   #6 (permalink)
Neuer Benutzer

Registriert seit: 05.10.2011
Beiträge: 13
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard AW: Context-Menü on TableRow

Dort ist es beschrieben, wie in jedem Tutorial und der Android Doku. Leider klappt es für mich einfach nicht.

Ich werde nun mal ein bisschen detaillierter:
Ich habe die Klasse Meeting_View extends Activity mit folgender onCreateMethode:
Code:
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.meeting_view);
        
        ... [Daten vom http-Server holen]
        
        TableLayout listSuggestions = (TableLayout) findViewById(R.id.list_suggestions);
        addSuggestions(listSuggestions, (List<Object>) meetingInfos.get("Suggestion_Area"), meeting_value);
    }
Die addSuggestions-Methode befüllt nun das TableLayout mit TableRows wie folgt:
Code:
private void addSuggestions(TableLayout listSuggestions, List<Object> suggestions, final long meeting_value) {
        LayoutInflater inflater = LayoutInflater.from(this);
        for (Object sugg_object: suggestions) {
            final TableRow listRow = (TableRow) inflater.inflate(R.layout.suggestion_list_item, null);
            
            ... [Anpassung des Inhalts der listRow]

            registerForContextMenu(listRow);
            listSuggestions.addView(listRow);            
        }
}
Und eben die in Post 1 geschriebene onCreateContextMenu-Methode.
Ich weiß einfach nicht mehr weiter. Mir würde nicht mal ein Workaround einfallen, um dieses Problem zu lösen...
witschi87 ist offline   Mit Zitat antworten
Alt 14.10.2011, 08:43   #7 (permalink)
Neuer Benutzer

Registriert seit: 05.10.2011
Beiträge: 13
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard AW: Context-Menü on TableRow

Meine Bachelorarbeit stagniert an dieser Stelle... niemand eine Idee? :/
witschi87 ist offline   Mit Zitat antworten
Alt 14.10.2011, 09:49   #8 (permalink)
Fortgeschrittenes Mitglied

Registriert seit: 14.08.2009
Beiträge: 354
Abgegebene Danke: 23
Erhielt 49 Danke für 43 Beiträge
Standard AW: Context-Menü on TableRow

Du solltest an der stelle kein TableLayout verwenden, sondern eine ListView List View | Android Developers

Sonst bekommst du schnell Probleme mit der Performance / Ressourcen Verbrauch.
__________________
http://android.fungamer.net/
MichaelS ist offline   Mit Zitat antworten
Alt 14.10.2011, 10:16   #9 (permalink)
Neuer Benutzer

Registriert seit: 05.10.2011
Beiträge: 13
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard AW: Context-Menü on TableRow

aber damit bekomme ich ja nicht 2 Listen untereinander realisiert. Ich möchte ja nicht innerhalb einer Liste scrollen, sondern hätte gerne "außenrum" ein scrollable. Sodass zuerst alle Terminvorschläge und anschließend erst alle Kommentare aufgelistet werden. Die Kommentare sind dann ggf. gar nicht ohne scrollen zu sehen. Dafür müsste ich dann aber alles in eine ListView tun, und das klingt nicht nach so einer tollen Lösung.
witschi87 ist offline   Mit Zitat antworten
Alt 14.10.2011, 10:52   #10 (permalink)
Fortgeschrittenes Mitglied

Registriert seit: 14.08.2009
Beiträge: 354
Abgegebene Danke: 23
Erhielt 49 Danke für 43 Beiträge
Standard AW: Context-Menü on TableRow

Klar ist ohne Probleme machbar. Du kannst 2 Listen untereinander machen. Sowohl kannst du auch ein extra Control oder ListView in eine Listview packen. Sprich oben lässt du deine Einträge und wenn man nach unten scrollt findet man die Kommentare. das is überhaupt kein Problem und ohne großen Aufwand zu machen.

Aber ist deine Sache. Meine Lösung wäre aufjedenfall besser von der Performance und Ressourcen Verbrauch.
__________________
http://android.fungamer.net/
MichaelS ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

Thema Autor Forum Antworten Letzter Beitrag
RatingBar in TableRow padde83 Android App Entwicklung 7 30.07.2010 16:08
onClickListener auf TableRow Gibbsnich Android App Entwicklung 0 20.07.2010 11:46
Usability beim Context menü Raidri Android App Entwicklung 6 11.06.2010 11:28
TableRow positionieren Luser_k Android App Entwicklung 1 23.04.2010 09:28
TableRow Ausrichtung joschika77 Android App Entwicklung 1 28.05.2009 15:33




Du liest gerade: "Context-Menü on TableRow" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.