2016-09-04 2 views
-1

Я пытаюсь изменить цвет текста определенных элементов в моем представлении сетки, но по какой-то причине он не работает. Каждый раз, когда я запускаю приложение, цвет текста для всех элементов gridview остается белым, что не является результатом, который я ожидал, несмотря на используемый код. Кто-нибудь знает, что пошло не так, и что нужно сделать, чтобы решить эту проблему?Текст таблицы GridView не меняет цвет

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; 
} 
} 

макет/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

показать нам, как вы реализуете адаптер? –

+0

Вам нужно будет создать пользовательский ArrayAdapter .. проверьте эту ссылку http://stackoverflow.com/questions/8166497/custom-adapter-for-list-view –

+0

Я забыл упомянуть, что gridview и listview адаптеры могут использоваться взаимозаменяемо, если написанных в целом. Вы можете сослаться на этот адаптер, чтобы создать свой собственный, он будет иметь одинаковую структуру. –

ответ

2

необходимо инициализировать макет, и пользовательский адаптер

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

По-прежнему не работает после использования вашего предлагаемого кода. Должен ли использоваться 'parent, false' вместо' null'? – MacaronLover

+0

Попробуйте LayoutInflater.from (getContext()). Inflate (R.layout.gridview_item, parent, false); –

+0

'Невозможно изменить метод 'getContext()'' – MacaronLover

Смежные вопросы