2016-07-22 5 views
-2

Ich habe 2 Fragmentklassen. In Fragment1.java,onItemClick eines ListView funktioniert nicht

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() 
     { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) { 
       // TODO Auto-generated method stub 
       String favorite_message =(parent.getItemAtPosition(position).toString()); 
       Log.d("hi","favorite" + favorite_message); 
       //Populate the edit text of Fragment1 
      } 
     }); 

In Fragment2.java,

 @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
    mytext= (EditText) view.findViewById(R.id.myEditText); 
    getText(); 
    } 

    public void getText(){ 
    String message = mytext.getEditableText().toString(); 
    } 

möchte ich die favorite_message in der mytext EditText sein. Da diese 2 Fragmente wie Tabulatoren sind, möchte ich bei onItemClick die Tab-Position automatisch auf Fragment2 verschoben werden und Text bearbeiten sollte favorite_message sein.

Wie mache ich das?

+0

zeigen Sie Ihren XML-Code –

+0

Verwenden Sie 'ViewPager' für Ihre" Like Tabs "? Könnten Sie Informationen über Ihre zwei Fragmente bereitstellen? –

+0

Siehe diese Antwort - http: // stackoverflow.com/questions/21228721/How-to-Replace-ein-Fragment-auf-Knopf-Klick-von-diesem-Fragment – Imdad

Antwort

1

Machen Sie Ihren Ansichtspager der Aktivität global wie unten in Ihrer Aktivitätsdatei, wo Sie Ihren Ansichtspager einstellen.

public static ViewPager YOUR_VIEW_PAGER; 

Machen Sie Ihren String weltweit erste, wie unten in Ihrem Fragment1:

public static boolean isListClicked=false; 
public static String favorite_message =""; 

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
      // TODO Auto-generated method stub 
      isListClicked=true; 
      favorite_message =(String)parent.getItemAtPosition(position); 
      //set second fragment in your viewpager by below line 
      YOURACTIVITY.YOUR_VIEW_PAGER.setCurrentItem(1); 
      Log.d("hi","favorite" + favorite_message); 
      //Populate the edit text of Fragment1 
     } 
    }); 

In onCreateView von Fragment2, schreibt wie folgt:

if (Fragment1.isListClicked){ 
    if(!Fragment1.favorite_message.equals("")) 
     mytext.setText(Fragment1.favorite_message); 

} 

Auch unter Methode in Ihrem Fragment2 hinzufügen

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) { 
     if (Fragment1.isListClicked){ 
      if(!Fragment1.favorite_message.equals("")) 
       txt.setText(Fragment1.favorite_message); 
     } 

    } 
} 
+0

Danke für die Antwort. Ich habe es implementiert und die Ansicht des Fragments ändert sich korrekt. Ich meine, es wird nach dem Klick auf Fragment2 verschoben. Aber der Bearbeitungstext hat nicht die favorite_message – Mark023

+0

Überprüfen Sie meinen bearbeiteten Code in onItemClick, um Ihre ausgewählteElemente zu erhalten. – Drv

+0

Versuchen Sie, Fragment1.favorite_message in Ihrer onCreateView von Fragment2 vor zu drucken (! Fragment1.favorite_message.equals ("")) mytext.setText (Fragment1.favorite_message); – Drv

1

Haben Sie eine Button oder ImageButton in Ihrem ListView-Item Wenn ja, dann, dieses Attribut muss die oberste Layout Ihrer XML hinzugefügt werden, wo Sie die ListView Elemente zur Verfügung gestellt haben.

android:descendantFocusability="blocksDescendants" 

wenn nicht, dann Sie beide Klassen veröffentlichen können, übrigens jetzt müssen Sie recyclerview

+0

Wie ist Dies betrifft meine Frage – Mark023

+0

funktioniert Ihr onitemclicklistener? Kannst du deine ** favorite_message ** in log – Sachin

+0

sehen? Ja, es funktioniert und ich kann die Nachricht im Log sehen – Mark023

0

verwenden Sie das Fragment unter Verwendung der Liste des Fragments von Fragment-Manager

wenn mit Unterstützung bekommen Fragmentmanager: getSupportFragmentManager(). getFragments();

bei Verwendung des Fragmentmanagers: getFragmentManager();

u knw dass Fragment2 in der zweiten Position ist in der Fragmentliste

so können Sie den Text festlegen, indem Sie diese

((Fragment2) getSupportFragmentManager(). GetFragments(). Get (1)) .setText ("Text");

wo setText (String) ist eine öffentliche Methode, die Sie in Fragment2 machen

Was meinst du mit Tab btw ???