2011-12-22 5 views
1

J'essaie de mettre à jour une seule ligne (deux textviews) dans une liste en changeant la visibilité de la seconde vue de "gone" à "visible".Mise à jour d'une seule ligne dans une liste pour afficher une vue de texte cachée

Voici le XML pour la mise en page personnalisée:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/userlistlayout" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Medium Text" 
     android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="#000000"/> 
    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Medium Text" 
     android:textAppearance="?android:attr/textAppearanceMedium" android:visibility="gone"/> 

J'utilise un arrayadapter pour lier les données à partir d'une chaîne [] au listview. Cela fonctionne parfaitement. Là où je rencontre des problèmes, je repousse le changement à l'écran.

Voici le code de test que j'ai pour mon adaptateur de tableau et la tentative de définir la visiblité sur la deuxième vue de texte d'une seule ligne.

searchResults = (ListView) findViewById(R.id.listView1);  
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.userlist, R.id.textView1,names); 

searchResults.setAdapter(adapter); 
//all the code above this point works perfectly to populate the listview (textview1) 
with the names passed in from the names string[]      

LinearLayout hold = (LinearLayout) adapter.getView(2, null, null); 
TextView hold2 = (TextView) hold.findViewById(R.id.textView2); 
hold2.setVisibility(TextView.VISIBLE); 

adapter.notifyDataSetChanged(); 

searchResults.invalidateViews(); 

Ce code ne jette pas tout type d'erreur, cependant, je ne reçois aucune sorte de mise à jour sur le listview. Je ne suis pas sûr de ce que je fais de mal ou quelle étape me manque pour obtenir le changement de visibilité fait à hold2 pour être repoussé dans l'adaptateur/listview et mis à jour sur l'écran où la deuxième textview sur cette rangée particulière sera visible.

Une fois que cela fonctionne, je veux le déclencher en un clic.

Toute aide serait grandement appréciée.

Répondre

0

c'est assez tard mais voici ma réponse;

Dans votre code, vous faites juste rafraîchir dans l'oncreate, juste une fois. mais vous avez l'écouter utilisateur pour tout le temps, vous pouvez le faire

listview.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       final int position, long id) { 

      //here 

     } 
    }); 

vous pouvez maintenant utiliser adapter.notifyDataSetChanged(); dans le sur le clic.

mais je pense que vous devriez vérifier ces messages

this

that

aussi il y a une autre solution, nous utilisons des animations

dans l'économie mondiale de l'adaptateur

public View selectedView ,previousView ; 
    public Animation fadeIn , fadeOut; 

dans le getview de l'adaptateur

try { 
       if (previousView != v){        
        Animation b = AnimationUtils.loadAnimation(context, R.anim.fadein); 
        b.setDuration(177); 
        b.setFillAfter(true); 
        previousView.startAnimation(b); 
        previousView.findViewById(R.id.llTicketViewOnClickContainer).setVisibility(View.GONE); 
       } 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

//..... some other code 




//just before closing of get view 
previousView =v 
} 
Questions connexes