2016-06-15 4 views
-1

Ich benutze eine Listview, wie ich dynamisch auffüllen muss. Es ist wie FAQs, das Element zeigt die Frage und sobald wir auf das Element klicken, sollte das bestimmte Element erweitert werden und eine Textansicht zeigen. Ich kann ExpandableListView nicht verwenden, da es nur einen TextView innerhalb des ListView-Elements gibt.So erweitern Sie eine ListView mit einem einzelnen TextView innerhalb des Elements

Item 1   v 
---------------------- 
    Item 2   v 
---------------------- 
    Item 3   v 

Also, wenn der Benutzer klickt auf Punkt 2:

Item 1   v 
---------------------- 
    Item 2   ^
    This is also a dynamic text but can be put in a single textview. 
---------------------- 
    Item 3   v 
---------------------- 

Bitte um Hilfe!

Das habe ich bis jetzt bekommen!

public View getView(int position, View convertView, ViewGroup parent) { 
     if(convertView == null){ 
      convertView = inflater.inflate(R.layout.layout_faq_item, parent, false); 
     } 
     FAQObject faq = faqList.get(position); 
     convertView.setTag(faq); 
     convertView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       FAQObject faq = (FAQObject) view.getTag(); 
       if(faq.isExpanded()) { 
        view.findViewById(R.id.text_faq_answer_title).setVisibility(View.GONE); 
        view.findViewById(R.id.text_faq_answer_content).setVisibility(View.GONE); 
        ((TextView)view.findViewById(R.id.text_faq_question)).setCompoundDrawablesWithIntrinsicBounds(0,0, 
          android.R.drawable.arrow_down_float, 0); 
        faq.setExpanded(false); 
       }else{ 
        ((TextView)view.findViewById(R.id.text_faq_question)).setText(faq.getQuestion()); 
        ((TextView)view.findViewById(R.id.text_faq_answer_content)).setText(faq.getAnswer()); 
        view.findViewById(R.id.text_faq_answer_title).setVisibility(View.VISIBLE); 
        view.findViewById(R.id.text_faq_answer_content).setVisibility(View.VISIBLE); 
        ((TextView)view.findViewById(R.id.text_faq_question)).setCompoundDrawablesWithIntrinsicBounds(0,0, 
          android.R.drawable.arrow_up_float, 0); 
        faq.setExpanded(true); 
       } 

      } 
     }); 
     return convertView; 
    } 

Die Liste wird nicht auf die volle Länge des Textes erweitert ..!

+0

Sie sollten den Code zeigen Sie so weit haben, und zeigen, was Sie versucht haben. – Bryan

Antwort

1

Erstellen Sie ein Layout mit zwei TextViews. Setzen Sie die Sichtbarkeit für die zweite Textansicht auf GONE. Implementieren Sie die AdapterView.OnItemClickListener-Schnittstelle und versuchen Sie es mit dem folgenden Code.

public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    View secondTextView = view.findViewById(R.id.second_text_view); 
    int visibility = secondTextView.getVisibility() == View.VISIBLE ? View.GONE : 
View.VISIBLE; 
    secondTextView.setVisibility(visibility); 
} 

P.S. Ich habe es nicht getestet, nur eine Idee gegeben.

+0

Ich hätte fast das Gleiche gemacht! aber der Gegenstand dehnt sich nicht auf die Größe des Textes im Inneren aus, sein Scrollen innerhalb dieses Gegenstands! Bitte schauen Sie sich den Code an, den ich gerade zur Frage hinzugefügt habe! –

0

Unter der Annahme, dass Sie einen benutzerdefinierten Adapter verwenden, dann können Sie die erweiterte Ansicht Sichtbarkeit von gone zu visible nach Zustand Prüfung eingestellt. Dies könnte in den Methoden getView oder bindView innerhalb des Adapters erfolgen. Als Beispiel betrachtet der folgende Code den vorherigen Eintrag und wenn der Shop anders ist, macht er einen Shop-Titel sichtbar (sonst weg) und ebenso, wenn der Gang anders ist. Dies wird in der listView'sbindView Verfahren ausgewertet: -

 if(prevshop != cursor.getLong(shoppinglist_shopid_offset)) { 
      shophdrll.setVisibility(View.VISIBLE); 
      shophdrll.setBackgroundColor(ContextCompat.getColor(context, R.color.colorlistviewheading)); 
     } else { 
      shophdrll.setVisibility(View.GONE); 
     } 
     if(prevaisle != cursor.getLong(shoppinglist_aisleid_offset)) { 
      aislehdrll.setVisibility(View.VISIBLE); 
      aislehdrll.setBackgroundColor(ContextCompat.getColor(context, R.color.colorlistviewsubheading)); 
     } else { 
      aislehdrll.setVisibility(View.GONE); 
     } 
Verwandte Themen