Отображение определенных текстовых представлений в виде сетки
В моем собственном адаптере он настроен на генерацию массива строк и отображение их в виде сетки с определенным стилем просмотра текста в каждой строке. Я настроил макет с тремя текстовыми представлениями, которые мне понадобятся. Я пытался следовать некоторым учебникам и примерам, но не смог понять это.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="1dp">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/score_num_tile"
android:id="@+id/tileWhite"
android:background="#ffffffff"
android:padding="2dp"
style="@style/base_style_right.text_size"/>
<TextView
style="@style/base_style_right.text_size"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/score_num_tile"
android:id="@+id/tileBlue"
android:background="#ff3143bb"
android:padding="2dp" />
<TextView
style="@style/base_style_right.text_size"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/score_num_tile"
android:id="@+id/tileRed"
android:background="#ffca4130"
android:padding="2dp" />
<TextView
style="@style/base_style_right.text_size"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/score_num_tile"
android:id="@+id/tileYellow"
android:background="#ffaca93c"
android:padding="2dp" />
</LinearLayout>
адаптер
package counter.prebuild;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
/**
* Created by CoreyNW on 7/9/2014.
*/
public class ScoreAdapter extends BaseAdapter {
private Context scoreContext;
private String[] tileArray;
int _count;
private int m;
public ScoreAdapter (Context c, int i, boolean parMode) {
scoreContext = c;
_count = i;
setTileValues(i, parMode);
Log.i("Running", "Is Running");
}
@Override
public int getCount() {
return 0;
}
@Override
public Object getItem(int i) {
return tileArray[i];
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int pos, View convView, ViewGroup viewGroup) {
LayoutInflater inflater = (LayoutInflater) scoreContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View gridView;
Log.i("getView", "Is Running");
if (convView == null) {
gridView = new View(scoreContext);
gridView = inflater.inflate(R.layout.score_tile, null);
TextView whiteTile = (TextView) gridView.findViewById(R.id.tileWhite);
TextView blueTile = (TextView) gridView.findViewById(R.id.tileBlue);
TextView redTile = (TextView) gridView.findViewById(R.id.tileRed);
TextView yellowTile = (TextView) gridView.findViewById(R.id.tileYellow);
TextView current;
int kfc = 0;
int counter = 1;
for (int i = 0; i < m; i++) {
switch (i) {
case 1:
current = blueTile;
break;
case 2:
current = redTile;
break;
case 3:
current = yellowTile;
break;
default:
current = whiteTile;
break;
}
for (int k = kfc; k < _count * counter; k++) {
current.setText(tileArray[pos]);
}
kfc += 18;
counter++;
}
Log.i("gridViewUsed", "Used If");
} else {
gridView = convView;
Log.i("gridViewDebug", "Used Else");
}
// FIXME : NOT DISPLAYING ANYTHING
return gridView;
}
private void setTileValues(int holeCount, boolean mode) {
m = mode ? 4 : 9;
tileArray = new String[m * holeCount];
for (int i = 0; i <holeCount; i++) {
tileArray[i] = String.valueOf(i++);
}
for (int i = 18; i <holeCount*2; i++) {
tileArray[i] = "4";
}
for (int i = 36; i <holeCount*3; i++) {
tileArray[i] = "4";
}
for (int i = 54; i <holeCount*4; i++) {
tileArray[i] = "6";
}
// TODO : SETUP TEXT VIEWS IF !MODE
}
}
1 ответ
Решение
Казалось, что не ссылаться на несколько текстовых представлений и просто использовать массив цветов для изменения цвета фона. Это показывает, как это должно быть.
public class ScoreAdapter extends BaseAdapter {
private Context scoreContext;
private String[] tileArray;
private int[] tileColors;
private int dims;
public ScoreAdapter (Context c, int holes, int dimens) {
scoreContext = c;
dims = dimens;
setTileValues(holes);
setTileColors(holes);
}
@Override
public int getCount() {
return tileArray.length;
}
@Override
public Object getItem(int i) {
return tileArray[i];
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int pos, View convView, ViewGroup viewGroup) {
LayoutInflater infated = (LayoutInflater) scoreContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View gridView;
if (convView == null) {
gridView = infated.inflate(R.layout.score_tile, null);
TextView textView = (TextView) gridView.findViewById(R.id.scoreTile);
textView.setWidth(dims);
textView.setHeight(dims);
textView.setText(tileArray[pos]);
textView.setBackgroundColor(tileColors[pos]);
// TODO : POPULATE GRID VIEW HORIZONTALLY FIRST
} else {
gridView = convView;
}
return gridView;
}
private void setTileValues(int holeCount) {
int counter = 0;
tileArray = new String[9 * holeCount];
int hole = 1;
for (int i = 0; i <holeCount; i++) {
tileArray[i] = String.valueOf(hole);
counter++;
hole++;
}
for (int i = counter; i <holeCount*2; i++) {
tileArray[i] = "4";
counter++;
}
for (int i = counter; i <holeCount*3; i++) {
tileArray[i] = "4";
counter++;
}
for (int i = counter; i <holeCount*4; i++) {
tileArray[i] = "6";
counter++;
}
for (int i = counter; i < holeCount*9; i++) {
tileArray[i] = "S";
counter++;
}
}
private void setTileColors(int holeCount) {
tileColors = new int[9 * holeCount];
int white = Color.parseColor("#ffededed");
int blue = Color.parseColor("#ff3143bb");
int red = Color.parseColor("#ffca4130");
int yellow = Color.parseColor("#ffaca93c");
int counter = 0;
for (int i = 0; i < holeCount; i++) {
tileColors[i] = white;
counter++;
}
for (int i = counter; i < holeCount*2; i++) {
tileColors[i] = blue;
counter++;
}
for (int i = counter; i < holeCount*3; i++) {
tileColors[i] = red;
counter++;
}
for (int i = counter; i < holeCount*4; i++) {
tileColors[i] = yellow;
counter++;
}
for (int i = counter; i < holeCount*9; i++) {
tileColors[i] = white;
counter++;
}
}
public String getValue (int pos) {
return tileArray[pos];
}
}