Android, адаптер массива не показывает содержимое строк - PullRequest
0 голосов
/ 20 октября 2011

В моем приложении у меня есть массив строк, в котором я храню свои строки.

private static String[] tokens = new String[1024];

Формат моей строки, которую я создаю в XML-файле:

<TableLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:shrinkColumns="*"  
android:stretchColumns="*" >
    <TableRow 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:layout_marginTop="10dip"
    android:layout_marginBottom="10dip" >
        <TextView
            android:id="@+id/outstanding_contractdate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#ffffff"
            android:textSize="15sp" />
        <TextView
            android:id="@+id/outstanding_contractno"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#ffffff"
            android:textSize="15sp" />
        <TextView
            android:id="@+id/outstanding_contractamount"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:textColor="#ffffff"
            android:textSize="15sp" />
    </TableRow>

</TableLayout>

В onCreate () я определил:

lvOutstanding = (ListView) findViewById(R.id.outstanding_list);
        myListAdapter = new MyListAdapter();
        lvOutstanding.setAdapter(myListAdapter);

и это мой адаптер:

class MyListAdapter extends ArrayAdapter<String>{
        MyListAdapter(){
            super(MSOutStanding.this, R.layout.list_outstanding, tokens);
        }

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

            if(row == null){
                LayoutInflater inflater = getLayoutInflater();
                row = inflater.inflate(R.layout.list_outstanding, parent, false);
            }

            TextView tvContDate = (TextView) row.findViewById(R.id.outstanding_contractdate);
            TextView tvContNo = (TextView) row.findViewById(R.id.outstanding_contractno);   
            TextView tvContAmount = (TextView) row.findViewById(R.id.outstanding_contractamount);

            if(position == 0)
                count = 0;
            else
                count = 3;

            if(arrayLoop>0){
                tvContDate.setText(tokens[position * count]);
                Log.i("Count:", tokens[position * count]);

                tvContNo.setText(tokens[position * count + 1]);
                Log.i("Count:", tokens[position * count +1]);

                tvContAmount.setText(tokens[position * count + 2]);
                Log.i("Count:", tokens[position * count+2]);

                arrayLoop -= 3;
                Log.i("Count:", String.valueOf(arrayLoop));
            }

            return(row);
        }
    }

как вы видели, в каждой строке у меня есть три textView, и я хочу показать каждые три элемента массива в каждой строке. «arrayLoop» - это переменная типа int и int, которая сохраняет количество элементов в массиве «tokens []».

Теперь, когда я запускаю приложение, эмулятор показывает 1024 строки без каких-либо данных. где мои ошибки? когда я проверяю logcat (спасибо Google за новый красивый дизайн logCat!), проблем нет, и первые 12 элементов в массиве имеют параметры, а для (12/3 = 4) я должен увидеть 4 строки с информацией. Тем не менее, у меня есть 1024 строки без информации: (

enter image description here

Ответы [ 2 ]

1 голос
/ 20 октября 2011

Вам нужно написать следующее, если массив токенов не является строковым типом.

    if(arrayLoop>0){

        tvContDate.setText(String.valueOf(tokens[position * count]));
        Log.i("Count:", tokens[position * count]);

        tvContNo.setText(String.valueOf(tokens[position * count]));
        Log.i("Count:", tokens[position * count +1]);

        tvContAmount.setText(String.valueOf(tokens[position * count]));
        Log.i("Count:", tokens[position * count+2]);

        arrayLoop -= 3;
        Log.i("Count:", String.valueOf(arrayLoop));
    }

Потому что, когда вы используете это tvContAmount.setText(tokens[position * count]); он будет думать, что это идентификатор ресурса. Он не получит это и, следовательно, не будет показывать никакого вывода.

0 голосов
/ 20 октября 2011

Ваша переменная arrayLoop должна быть 0 или меньше.Я думаю, что ваша проблема в том, что вы поместили arrayLoop в оператор if, который вы намеревались поместить в count.Но я не вижу, где вы определили arrayLoop или что вы ему присвоили.

...