私はJavaとAndroidの両方の開発の初心者です。私はこれを間違っていると確信しています。それは私がこれまでに理解した方法です。そうは言っても、ゴルフのスコアカードのようなものを表示するアプリがあります。4 人のプレーヤーごとにセクション (主要な行) があります。各プレイヤー列は 3 つのサブ列で構成されます。1 つはパー (行の 18 の値)、1 つはホール ハンディキャップ (18 の値)、もう 1 つはスコア (18 の値) です。ユーザーが主要な行をクリックして、クリックされた行で名前が付けられたプレーヤーに基づいて別のアクティビティが表示されるようにします。
そこで、単一の ListView を使用して XML レイアウトを作成しました。12 列を定義する GridView を使用してページ ヘッダー用の XML レイアウトを作成し、それぞれに列ヘッダー用の TextView を定義し、54 項目 (18 項目の 3 つのサブ行) の TextView を含む GridView を使用して主要行用の XML レイアウトを作成しました。 . また、行定義 XML の GridLayout 宣言に onClick リスナーを追加しました。4 人のプレーヤーを処理するカスタム arrayAdapter を投入すると、スコアカードが画面に表示されます。
すべて正常に表示され、主要な行をクリックすると、clickListener のデバッグ ブレークポイントに到達し、インテントを起動して、プレーヤーの詳細を表示するアクティビティを開始できます。しかし、どのプレーヤー (メジャー行) がクリックされたかを判断する方法がわかりません。
String item = ((TextView)view).getText().toString();
クリックハンドラーでアプリがクラッシュするのは、clickListenerがGridLayoutなどで確立されたためだと思います。
では、セットアップのどこが間違っているのでしょうか。また、先に進むために必要なものを入手するにはどうすればよいでしょうか?
ありがとう
関連するコードは次のとおりです。多かったらすいません…
activity_display_scorecard.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF">
<ListView
android:id="@+id/listView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
これが activity_sisplay_scorecard_row.xml です (列 4 ~ 12 を編集しました)
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:useDefaultMargins="true"
android:alignmentMode="alignBounds"
android:columnOrderPreserved="false"
android:columnWidth="90dp"
android:columnCount="12"
android:id="@+id/SCRow"
android:onClick="displayScore"
>
<TextView
android:text=""
android:layout_column="0"
android:textSize="15sp"
android:layout_gravity="left"
/>
<TextView
android:text="Par"
android:layout_column="1"
android:textSize="15sp"
android:layout_gravity="right"
/>
<TextView
android:id="@+id/Par_Hole_1"
android:text="V_1"
android:textSize="15sp"
android:layout_gravity="center_horizontal"
/>
<!-- A bunch more for this row -->
<TextView
android:text=""
android:layout_column="0"
android:textSize="15sp"
android:layout_gravity="left"
/>
<TextView
android:text="HCP"
android:layout_column="1"
android:textSize="15sp"
android:layout_gravity="right"
/>
<TextView
android:id="@+id/HCP_Hole_1"
android:text="V_1"
android:textSize="15sp"
android:layout_gravity="center_horizontal"
/>
<!-- A bunch more for this row -->
<TextView
android:text=""
android:textSize="15sp"
android:layout_gravity="center_horizontal"
/>
<TextView
android:text="Name"
android:id="@+id/Row_Name"
android:layout_column="0"
android:textSize="15sp"
android:layout_gravity="left"
/>
<TextView
android:text="Bet"
android:layout_column="1"
android:textSize="15sp"
android:layout_gravity="right"
/>
<TextView
android:id="@+id/Bet_Hole_1"
android:text="B1"
android:textSize="15sp"
android:layout_gravity="center_horizontal"
/>
<!-- A bunch more for this row -->
<TextView
android:text=""
android:layout_column="0"
android:textSize="15sp"
android:layout_gravity="left"
/>
<TextView
android:text="Score"
android:layout_column="1"
android:textSize="15sp"
android:layout_gravity="right"
/>
<TextView
android:id="@+id/Score_Hole_1"
android:text="V_1"
android:textSize="15sp"
android:layout_gravity="center_horizontal"
/>
<!-- A bunch more for this row -->
</GridLayout>
ここに活動 DisplayScorecard があります
public class DisplayScorecard extends Activity {
private ListView listView1;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_scorecard);
CardRow scoreCard_data[] = new CardRow[]
{
new CardRow(0),
new CardRow(1),
new CardRow(2),
new CardRow(3)
};
CardRowAdapter adapter = new CardRowAdapter(this,
R.layout.activity_display_scorecard_row, scoreCard_data);
listView1 = (ListView)findViewById(R.id.listView1);
View header = (View)getLayoutInflater().inflate(R.layout.activity_display_scorecard_header, null);
listView1.addHeaderView(header);
listView1.setAdapter(adapter);
}
/** Called when the user Selects a scorecard row */
public void displayScore(View view) {
String item = ((TextView)view).getText().toString();
Toast.makeText(getApplicationContext(), "ABC" + item, Toast.LENGTH_LONG).show();
Intent intent = new Intent(this, DisplayScore.class);
startActivity(intent);
}
}