我是 Java 和 Android 开发的初学者,我确信我做错了;到目前为止,这只是我想出来的方式。也就是说,我有一个应用程序可以显示类似高尔夫记分卡的内容。4 名玩家中的每人都有一个部分(主要行)。每个玩家行包括 3 个子行;一个用于标准杆(行中的 18 个值),一个用于孔让分盘(18 个值),一个用于得分(18 个值)。我希望用户单击主要行并根据单击行中命名的玩家显示另一个活动。
因此,我使用单个 ListView 创建了一个 XML 布局。我为页面标题创建了一个 XML 布局,其中一个 GridView 定义了 12 列,每个列都有一个用于列标题的 TextView,我为主要行创建了一个 XML 布局,其中一个 GridView 包含 54 个项目的 TextViews(3 个子行,18 个项目) . 我还在行 def XML 中的 GridLayout 声明中添加了一个 onClick 侦听器。加入一个自定义的 arrayAdapter 来处理 4 个玩家,我的记分卡出现在屏幕上。
一切都显示正常,当我单击主要行时,我会到达 clickListener 中的调试断点,我可以触发 Intent 以启动显示玩家详细信息的活动。但是,我不知道如何确定点击了哪个玩家(主要行)。
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);
}
}