これを行うには多くの方法がありますが、特定の状況では他の方法よりも優れている方法もあります。
使用するクラスを理解する
別の回答に投稿されているように、次のものが必要になります。
- あなたの
ListView
データを表示するためのいくつかのフレーバーの
- データの表示を処理するためのある種のアダプター(
BaseAdapter
問題なく動作します)
- データを格納する変数(私はお勧めします
ArrayList
)
Layout
データの各セットを1行に表示するカスタムListView
これを機能するものに変える
まず、コンポーネントを作成して最後にリンクするのが最も簡単です。ListView
したがって、最初に、 :の各行のレイアウト
// Very basic layout for a row
public class rowView extends LinearLayout {
TextView tv1 = null;
TextView tv2 = null;
TextView tv3 = null;
TextView tv4 = null;
public rowView(Context ct) {
super(ct);
// Do some Layout settings as needed
setOrientation(LinearLayout.HORIZONTAL);
// Create and configure TextViews
tv1 = new TextView(ct);
tv2 = new TextView(ct);
tv3 = new TextView(ct);
tv4 = new TextView(ct);
tv1.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1.0f));
tv2.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1.0f));
tv3.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1.0f));
tv4.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1.0f));
// Add the views to the layout
addView(tv1);
addView(tv2);
addView(tv3);
addView(tv4);
}
}
次はあなたのデータ表示です、あなたがあなたEditText
のものなどにそれをリンクする方法は異なります。しかし、ここにあなたがどのようにを使うことができるかについてのいくつかの考えがありますArrayList<String[]>
。
3番目の数値を計算するときに、次のような関数を呼び出します。
public void addData(String date, String num1, String num2, String calculatedNum) {
String[] s = new String[4];
s[0] = date;
s[1] = num1;
s[2] = num2;
s[3] = calculatedNum;
arrayListofStrings.add(s);
}
これでデータが保存されます。ListView
最後の主要なステップは、「データと正しく通信できるようにする」ためにセットアップする必要のあるアダプターを作成することです。新しいデータが最後に追加されるのを見るとArrayList
(最初に追加するよりもはるかに簡単です)、次のようにアダプターで順序を入れ替えるだけです。
public class myAdapter extends BaseAdapter {
public int getCount() {
return arrayListofStrings.size();
}
public Object getItem(int position) {
// Returns the strings in REVERSE order
return arrayListofStrings.get(arrayListofStrings.size() - 1 - position);
}
public long getItemId(int position) {
// Not concerned with this
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
// Here is the version for memory optimization (aka view recycling). This should be habit
rowView ret = null;
if (convertView == null) {
// Create a new view
ret = new rowView(getApplicationContext());
} else {
// Cast and reuse
ret = (rowView) convertView;
}
// Get the data
String[] data = (String[]) getItem(position);
// Update the row with the data
ret.tv1.setText(data[0]);
ret.tv2.setText(data[1]);
ret.tv3.setText(data[2]);
ret.tv4.setText(data[3]);
return ret;
}
}
最後のステップはListView
、必要な場所に自分を作成し、Adapter
自分ListView
やその他のマイナーなもの(値を文字列にキャストするなど)を作成してアタッチすることです。
これは決して実用的な解決策ではなく、どのような考え方がそれに入るのか、そしてあなたが何をする必要があるのかという内臓にすぎません。
注:データを変更するときは常に、BaseAdapter.notifyDataSetChangedを呼び出すようにしてください