2016-09-04 1 views
-1

Ich versuche, die Textfarbe bestimmter Elemente in meiner Rasteransicht zu ändern, aber aus irgendeinem Grund funktioniert es nicht. Jedes Mal, wenn ich meine App starte, bleibt die Textfarbe für alle meine Gridview-Elemente weiß, was trotz des verwendeten Codes nicht das erwartete Ergebnis ist. Weiß jemand, was schief gelaufen ist und was zu tun ist, um dieses Problem zu lösen?GridView Element Text nicht ändern Farbe

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<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"> 

    <GridView 
     android:id="@+id/gridView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentStart="true" 
     android:listSelector="@android:color/transparent" 
     android:clickable="false" 
     android:numColumns="auto_fit" 
     android:columnWidth="90dp" 
     android:gravity="center" 
     android:stretchMode="columnWidth"> 
    </GridView> 
</RelativeLayout> 

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    GridView gridView; 

    static final String[] years = new String[]{ 
      "1863", "1864", "1868", "1871", "1890", 
      "1898", "1900", "1906", "1968", "1979"}; 

    @Override 
    public void onCreate (Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 

     gridView = (GridView) findViewById(R.id.gridView1); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.gridview_item, R.id.item_gridview, years); 
     gridView.setAdapter(adapter); 
    } 

public View getView(int position, View convertView, ViewGroup parent) { 

    TextView tv = (TextView) convertView.findViewById(R.id.item_gridview); 

    if(position == 4 | position == 6){ 
     tv.setTextColor(Color.parseColor("#1e1eff")); 
    } 
    else if(position == 2){ 
     tv.setTextColor(Color.parseColor("#e32017")); 
    } 
    else { 
     tv.setTextColor(Color.WHITE); 
    } 


    return tv; 
} 
} 

layout/gridview_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
     android:id="@+id/item_gridview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="12dp" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 
</RelativeLayout> 
+0

uns zeigen, wie Sie Ihren Adapter implementieren? –

+0

Sie müssen ein benutzerdefiniertes ArrayAdapter erstellen .. überprüfen Sie diesen Link http://stackoverflow.com/questions/8166497/custom-adapter-for-list-view –

+0

Ich vergaß zu erwähnen, Gridview und Listview-Adapter können austauschbar verwendet werden, wenn allgemein geschrieben. Sie können diesen Adapter beziehen, um Ihr eigenes zu erstellen, es wird die gleiche Struktur haben. –

Antwort

2

Sie müssen Ihr Layout initialisieren und kundenspezifische Adapter

UPDATE

public class MainActivity extends Activity { 

    GridView gridView; 
    public MyAdapter adapter; 
    static final String[] years = new String[] { 
     "1863", "1864", "1868", "1871", "1890", 
     "1898", "1900", "1906", "1968", "1979" 
    }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 

     gridView = (GridView) findViewById(R.id.gridView1); 
     adapter = new MyAdapter(getApplicationContext(), 0); 
     gridView.setAdapter(adapter); 
     for (int i = 1; i < years.length; i++) { 

      adapter.addAdapterItem(new AdapterItem(years[i])); 
     } 
    } 

    public class MyAdapter extends ArrayAdapter <AdapterItem> { 
     private List <AdapterItem> items = new ArrayList <AdapterItem>(); 

     // private static LayoutInflater inflater=null; 
     public MyAdapter(Context context, int textviewid) { 
      super(context, textviewid); 
     } 

     public void addAdapterItem(AdapterItem item) { 
      items.add(item); 
     } 

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

     @Override 
     public AdapterItem getItem(int position) { 
      return ((null != items) ? items.get(position) : null); 
     } 

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

     @SuppressWarnings("deprecation") 
     @Override 
     public View getView(final int position, View convertView, 
      final ViewGroup parent) { 
      View rowView; 
      if (convertView == null) { 
       rowView = getLayoutInflater().inflate(R.layout.gridview_item, 
        null); 
      } else { 
       rowView = convertView; 
      } 
      TextView tv = (TextView) rowView.findViewById(R.id.item_gridview); 
      tv.setText(items.get(position).first); 
      if (position == 4 || position == 6) { 

       tv.setTextColor(Color.parseColor("#1e1eff")); 
      } else if (position == 2) { 
       tv.setTextColor(Color.parseColor("#e32017")); 
      } else { 
       // tv.setTextColor(Color.WHITE); 
      } 

      return rowView; 
     } 
    } 

    public class AdapterItem { 
     public String first; 

     // add more items 
     public AdapterItem(String first) { 
      this.first = first; 

     } 
    } 
} 
+0

Funktioniert immer noch nicht, nachdem Sie Ihren vorgeschlagenen Code verwendet haben. Sollte "parent, false" anstelle von "null" verwendet werden? – MacaronLover

+0

Versuchen Sie LayoutInflater.from (getContext()). Inflate (R.layout.gridview_item, parent, false); –

+0

'Kann die Methode 'getContext()' nicht reslove '' – MacaronLover

Verwandte Themen