2

私は検索しましたが、私の問題に対する答えが見つからないので、間違ったツリーを完全に吠えていないことを願っています(いわば)。

私はアンドロイドが初めてで、アプリの作成を開始しました。1 つの画面上の私のアプリは、パブリック クラス DatabaseHandler を使用して SQLite データベースにエントリを作成および追加し、SQLiteOpenHelper を拡張します。これはすべて機能しているように見えます。

すべてのデータを取得してグリッドに入力すると、これも機能するようになりました。

私の問題は、グリッドから 1 つの完全な行を取得できないことです。

次のコードでグリッドを設定/表示します。

グリッドはステージ、ヘッダー、空白行などで作成されているため、多くを切り取っていますが、グリッドは希望どおりに表示されます。

ID は、線に触れると一意の ID が表示されるように機能します。

onClick は最後にあり、getID() の代わりに getText() を使用すると、返されるのは labelDate のデータだけです。以下にリストされているすべてのラベルを取得するにはどうすればよいですか?

パッケージcom.pump.diary;

import java.util.List;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;

public class PumpDiaryReview extends Activity implements android.view.View.OnClickListener{
DatabaseHandler db = new DatabaseHandler(this);

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pump_diary_review);

    TableLayout tl = (TableLayout) findViewById(R.id.gridview);
    boolean doFirstHeadings = true;
    String dateCheck = "";
    Integer count=0;

    List<Readings> readings = db.getAllReadings();
    for (Readings re : readings)
    {
        if (doFirstHeadings == true)
        {
            //First record so setup the headings.
            TableRow tr_head = new TableRow(this);
            tr_head.setId(10);
            tr_head.setBackgroundColor(Color.GRAY);
            tr_head.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

            TextView label_date = new TextView(this);
            label_date.setText("Date:Time");
            TextView label_CP = new TextView(this);
            label_CP.setText("CP");;
            TextView label_BG = new TextView(this);
            label_BG.setText("BG");
            TextView label_QA = new TextView(this);
            label_QA.setText("QA");
            TextView label_CN = new TextView(this);
            label_CN.setText("CN"); 
            TextView label_KT = new TextView(this);
            label_KT.setText("KT");  

            TextView[] tvHeaderArray = {label_date, label_CP, label_BG, label_QA, label_CN, label_KT};

            for (TextView tvHeader : tvHeaderArray)
            {
                tvHeader.setTextColor(Color.WHITE);
                tr_head.addView(tvHeader);
            }
            tl.addView(tr_head, new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
            doFirstHeadings = false;
            count = 0;
        }

        // Create the table row
        TableRow tr = new TableRow(this);
        tr.setClickable(true);
        tr.setId(100+count);
        tr.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

        TextView labelDATE = new TextView(this);
        TextView labelCP = new TextView(this);
        TextView labelBG = new TextView(this);
        TextView labelQA = new TextView(this);
        TextView labelCN = new TextView(this);
        TextView labelKT = new TextView(this);
        TextView[] tvArray = {labelDATE, labelCP, labelBG, labelQA, labelCN, labelKT};

        if (!dateCheck.equals(re.getDate()) || (dateCheck == null) || dateCheck == "")
        {
            //Add a blank line in.
            TableRow tr_blank = new TableRow(this);
            tr_blank.setId(10);
            tr_blank.setBackgroundColor(Color.GRAY);
            tr_blank.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

            TextView label_date = new TextView(this);
            label_date.setId(20);
            label_date.setText(re.getDate());
            label_date.setTextColor(Color.WHITE);
            tr_blank.addView(label_date);

            tl.addView(tr_blank, new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
        }

        labelDATE.setText(re.getTime());
        labelCP.setText(re.getCP());
        labelBG.setText(re.getBG());
        labelQA.setText(re.getQA());
        labelCN.setText(re.getCN());
        labelKT.setText(re.getKT());
        for (TextView tv : tvArray)
        {
            tv.setTextColor(Color.WHITE);
            tv.setId(200+count);
            tr.setOnClickListener(this);
            tr.addView(tv);
        }
        //add this to the table row
        tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

        dateCheck = re.getDate().toString();
        ++count;
    }
    }
    public void onClick(View v) 
    { 
        if (v instanceof TableRow) 
        { 
            TableRow row = (TableRow) v; 
            TextView child = (TextView) row.getChildAt(0); 
            Toast toast = Toast.makeText(this, String.valueOf(child.getId()), Toast.LENGTH_SHORT); 
            toast.show();
        } 
    } 
}

必要に応じて、グリッド作成用のすべてのコードを提供できます。

助けてくれてありがとう。

4

2 に答える 2

0

あなたの問題はここにあります:

            TextView child = (TextView) row.getChildAt(0); <------------------
            Toast toast = Toast.makeText(this, String.valueOf(child.getId()), Toast.LENGTH_SHORT); 
            toast.show();

行の最初の子を具体的に要求し、そこからテキストを取得していますが、もちろん値は 1 つしか得られません。残りをすべて取得するには、あなたに行き、List<Readings>必要なオブジェクトをインデックスで指定することをお勧めします。その後、オブジェクトからすべてを印刷できます。このインデックスを取得する方法については...現在の実装では、textViews が作成され、作成されているときにインデックスでタグ付けListするのが最も簡単だと思います。

于 2012-12-19T23:22:56.833 に答える
0

私の問題は、グリッドから 1 つの完全な行を取得できないことです。

onClick は最後にあり、getID() の代わりに getText() を使用すると、返されるのは labelDate のデータだけです。以下にリストされているすべてのラベルを取得するにはどうすればよいですか?

質問を理解しているかどうかはわかりませんが、これにより、すべての ID がTableRow

public void onClick(View v) {
    if (v instanceof TableRow) {
        TableRow row = (TableRow) v;
        String msg = "";
        for (int i=0; i < row.getChildCount(); i++) {
            TextView child = (TextView) row.getChildAt(i);
            msg += String.valueOf(child.getId()) + " ";
        }
        Toast toast = Toast.makeText(this, msg, Toast.LENGTH_SHORT);
        toast.show();
    }
}
于 2012-12-19T00:32:18.587 に答える