1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

ListFragment & OnLongClick

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von dignity, 15.07.2012.

  1. dignity, 15.07.2012 #1
    dignity

    dignity Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    15.07.2012
    [english follows]

    Hallo,

    ich habe da ein Problem mit dem ListFragment, das mich langsam in den Wahnsinn treibt!
    Was ich so gesehen habe, wurde diese Frage auch schon häufig in anderen Foren gestellt, jedoch konnte ich nirgends eine Lösung zu meinem Problem finden.

    Langer Reder kurzer Sinn:
    ich möchte auf einen Long-Click im ActionBar Edit/Share/Delete anzeigen doch leider reagiert meine ListView nicht auf den LongClick.

    Hier der Code.

    Was mache ich falsch?

    -------

    Hi,

    i got a problem with the ListFragment that's driving me nuts!
    From what I've seen this seems to be a rather frequently asked question in various forums, however i couldn't find a solution to my problem yet.

    To cut a long story short:
    I want to react to a LongClick in my ListView to display some Edit/Share/Delete option in the ActionBar, however my ListView won't fire the LongClick event.

    Here's the code.

    What am I missing?

    Code:
    package com.example.longclicktest;
    
    import android.os.Bundle;
    import android.support.v4.app.ListFragment;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.Toast;
    
    public class MyListFragment extends ListFragment {
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        setHasOptionsMenu(true);
    
        String[] items = { "this", "is", "a", "really", "silly", "list" };
        setListAdapter(new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_list_item_activated_1,
            android.R.id.text1, items));
      }
    
      @Override
      public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    
        ListView listView = getListView();
        listView.setLongClickable(true);
        listView.setOnLongClickListener(new View.OnLongClickListener() {
    
          @Override
          public boolean onLongClick(View view) {
            Toast.makeText(getActivity(), "Long press!",
            Toast.LENGTH_SHORT).show();
            return true;
          }
    
        });
      }
    }
    
     
  2. StefMa, 16.07.2012 #2
    StefMa

    StefMa Gewerbliches Mitglied

    Beiträge:
    2,054
    Erhaltene Danke:
    413
    Registriert seit:
    16.10.2010
  3. dignity, 16.07.2012 #3
    dignity

    dignity Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    15.07.2012
    1. Ich habe nicht geschrieben, dass ich diese Frage bereits in mehreren Foren gepostet habe, sondern dass ich diese oder eine ähnliche Frage in mehreren Foren bereits gefunden habe.

    2. Die englische Übersetzung ist nur ergänzend - du kannst dich also voll und ganz auf die deutsche Version konzentrieren und musst nicht englisch sprechen um die Frage verstehen oder beantworten zu können.

    3. Schön, dass du mir den ActionMode erklärst - das löst mein Problem nur leider nicht, denn die Frage lautet ja warum meine ListView nicht auf meinen LongClickListener reagiert. Der ActionMode würde ggf. dann später zum Zug kommen.
     
  4. swordi, 16.07.2012 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    englisch kann nie schaden. auch wenn wir hier zum größteil deutsch sprechen.
     
  5. dignity, 16.07.2012 #5
    dignity

    dignity Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    15.07.2012
    [english follows]

    Hallo,

    anbei die Lösung zu meinem Problem.
    Ich habe schlicht den falschen Listener verwendet - View.OnLongClickListener statt AdapterView.OnItemLongClickListener.

    -------

    Hi,

    please find attached the solution to my problem.
    I simply used the wrong kind of Listener - View.OnLongClickListener instead of AdapterView.OnItemLongClickListener.


    Code:
    package com.example.longclicktest;
    
    import android.os.Bundle;
    import android.support.v4.app.ListFragment;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.Toast;
    import android.widget.AdapterView.OnItemLongClickListener;
    
    public class MyListFragment extends ListFragment {
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        setHasOptionsMenu(true);
    
        String[] items = { "this", "is", "a", "really", "silly", "list" };
        setListAdapter(new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_list_item_activated_1,
            android.R.id.text1, items));
      }
    
      @Override
      public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    
        ListView listView = getListView();
        listView.setLongClickable(true);
        listView.setOnItemLongClickListener(new OnItemLongClickListener() {
          public boolean onItemLongClick(AdapterView<?> parent, View view,
              int position, long id) {
            Toast.makeText(getActivity(), "Long press!", Toast.LENGTH_SHORT).show();
            return true;
          }
    
        });
      }
    }
    
     
  6. StefMa, 17.07.2012 #6
    StefMa

    StefMa Gewerbliches Mitglied

    Beiträge:
    2,054
    Erhaltene Danke:
    413
    Registriert seit:
    16.10.2010
    Haha :D Sollte nicht so rüber kommen, wie es anscheinend gekommen ist :)
    Natürlich können wir hier englisch sprechen (muss nur grade an den Foren-manager denken xD) und anscheinend habe ich generell die Frage ein wenig falsch verstanden :D

    Aber jetzt hast du es ja.

    Gruß
     

Diese Seite empfehlen