2017-03-28 5 views
0

Ich arbeite mit einer GridView und versuchte, die Sichtbarkeit einer Textansicht in jedem Rasterelement umzuschalten. Ich benutze einen benutzerdefinierten Adapter und habe den entsprechenden Code implementiert und die android:visibility auch geändert.Sichtbarkeit der Textansicht in der Gridview umschalten

Was fehlt mir hier? Jede Hilfe würde sehr geschätzt werden. :)

Hier sind die relevanten Teile meines Code:

MyAdapter.java

public class MyAdapter extends BaseAdapter { 
Context context; 
ArrayList<Players> playerList; 
private static LayoutInflater inflater = null; 

public MyAdapter(Context context, ArrayList<Players> playerList){ 
    this.context = context; 
    this.playerList = playerList; 
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 


@Override 
public int getCount() { 
    return playerList.size(); 
} 

@Override 
public Object getItem(int position) { 
    return position; 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) 
     convertView = inflater.inflate(R.layout.layout_grid_item, null); 

    TextView idTextView = (TextView) convertView.findViewById(R.id.tv_player_id); 
    TextView nameTextView = (TextView) convertView.findViewById(R.id.tv_player_name); 
    TextView roleTextView = (TextView) convertView.findViewById(R.id.tv_player_role); 

    Players p = new Players(); 
    p = playerList.get(position); 
    idTextView.setText("ID " + String.valueOf(p.getId())); 
    nameTextView.setText("Name " + String.valueOf(p.getName())); 
    roleTextView.setText("Role " + String.valueOf(p.getRole())); 
    toggleView(roleTextView); 



    return convertView; 
} 

public void toggleView(View view){ 
    if(view.getVisibility() == View.INVISIBLE) 
     view.setVisibility(View.VISIBLE); 
    else if(view.getVisibility() == View.VISIBLE) 
     view.setVisibility(View.INVISIBLE); 


} 

} 

layout_grid_item.xml

<TextView 
    android:id="@+id/tv_player_role" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAlignment="center" 
    android:visibility="gone" 
    android:text="role" /> 

fragment_viewroles.xml (GRID VIEW)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.example.tuss.mafia.GameActivity" > 

<GridView 
    android:id="@+id/gv_players" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:numColumns="auto_fit" 
    android:stretchMode="columnWidth" 
    android:columnWidth="150dp" 
    android:horizontalSpacing="10dp" 
    android:verticalSpacing="10dp" 
    android:gravity="center" > 
</GridView> 

</RelativeLayout> 

Antwort

1

In Ihrem xml gesetzt klickbare auf true

<TextView 
    android:onClick="onClick" 
    android:clickable="true" 
    /> 

Verwendung dieser Methode

public void toggleView(View view){ 
    if(view.getVisibility()==View.INVISIBLE) 
     view.setVisibility(View.VISIBLE); 
    else if(view.getVisibility()==View.VISIBLE) 
     view.setVisibility(View.INVISIBLE); 
} 

und nennen Sie es wie

toggleView(roleTextView); 

Endprodukt

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) 
     convertView = inflater.inflate(R.layout.layout_grid_item, null); 

    TextView idTextView = (TextView) convertView.findViewById(R.id.tv_player_id); 
    TextView nameTextView = (TextView) convertView.findViewById(R.id.tv_player_name); 
    TextView roleTextView = (TextView) convertView.findViewById(R.id.tv_player_role); 

    Players p = new Players(); 
    p = playerList.get(position); 
    idTextView.setText("ID " + String.valueOf(p.getId())); 
    nameTextView.setText("Name " + String.valueOf(p.getName())); 
    roleTextView.setText("Role " + String.valueOf(p.getRole())); 


//If you want to show text by default 
roleTextView.setVisibility(View.VISIBLE); 

//If you want to hide text by default 
roleTextView.setVisibility(View.INVISIBLE); 

roleTextView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       toggleView(view); 
      } 
     });  


    return convertView; 
} 

public void toggleView(View view){ 
    if(view.getVisibility() == View.INVISIBLE) 
     view.setVisibility(View.VISIBLE); 
    else if(view.getVisibility() == View.VISIBLE) 
     view.setVisibility(View.INVISIBLE); 


} 
+0

Ich habe diese Methode versucht, aber es funktioniert immer noch nicht, ich entfernte 'Sichtbarkeit: weg 'und so weit bleibt das Textfeld verborgen, reagiert nicht auf Berührung. – Tuss

+0

Können Sie Ihre Rasteransicht xml posten? –

+0

Ich habe meinen Beitrag bearbeitet :) – Tuss

0
if (R.id.tv_player_role == View.VISIBLE) {} 

dies falsch Sie es mit isShown() Methode tun müssen, um

if(roleTextView.isShown()){ 
//it is visible so do something 
} 
else { 
//it is invisible 
} 

oder view.getVisibility()

0

innerhalb public void onClick(View v) Methode von View.OnClickListener verwenden

if (v.getVisibility() == View.VISIBLE) 

beachten Sie auch roleTextView Sichtbarkeit in XML zu gone gesetzt ist, so dass, wenn Sie es nicht durch Code Makeln werden dann gibt es nichts auf dem Bildschirm klicken (setText nicht ausreichend ist, oder Sie zu viel Code zerschnitt) ...

Verwenden Sie inflater.inflate(R.layout.layout_grid_item, parent, false); für eine bessere Leistung und bei Bedarf zu implementieren ViewHolder Muster wie andere Fellas vorgeschlagen

+0

Ich bin mir nicht sicher, was Sie meinen, ich habe aktualisiert, um meine volle MyAdapter-Klasse zu zeigen. – Tuss

+0

Innerhalb der 'toggleView' Methode überprüfen Sie, ob 'View's Sichtbarkeit' VISIBLE' oder 'INVISIBLE' ist, aber in XML haben Sie' android: Sichtbarkeit = "Gone" '. Beide "if" Checks sind "false" also Methode tue überhaupt nichts ... ändere XML Zeile zu 'android: Sichtbarkeit =" unsichtbar "' – snachmsm

0

Zunächst einmal Ansicht Halter-Muster mit Liste und Raster immer verwenden. Es reduziert viele Probleme in Bezug auf die Ansichtslast während des Scrollens.

Jetzt für Ihr Problem müssen Sie pflegen Index der Ansicht, für die Sie Textansicht versteckt haben und für die Sie nicht haben. Wenn Sie das Gitter scrollen, prüfen Sie die Position und entscheiden Sie dann, ob das Wetter angezeigt werden soll oder nicht. Aktivieren Sie diese Anleitung für für jede Zeile (Nur eine Referenz) Speichern Index - http://www.androprogrammer.com/2013/10/list-view-with-check-box-using-custom.html

Verwandte Themen