gpt4 book ai didi

android - 制作一个带有可点击对象的 2D 可滚动表格

转载 作者:行者123 更新时间:2023-11-30 03:44:25 24 4
gpt4 key购买 nike

我正在尝试制作一个充满项目的表格/网格。到目前为止,我已经按照Fuzzical Logic 的建议实现了一个GridView。 .这是一个 image of the result .我可以向两个方向滚动。

我的问题是,通过为我的 GridView 设置一个新的 OnTouchListener(它允许在两个方向上滚动),我的项目不再是可点击的。我尝试从 GridView 的 onTouch 方法调用 OnItemClickListener,但我认为它太复杂了。

所以我现在要问你,显示可在两个方向滚动的可点击项目表的最佳方法是什么。此外,项目的数量可能会有很大差异,列数也是如此。可以有“空”单元格。

我非常喜欢 GridView,因为它易于管理,但缺少 2D 滚动。有什么想法吗?

戈达克

最佳答案

我已经通过以下方式实现了一个可点击的表格:

    TableLayout table = (TableLayout) findViewById(R.id.tableReportsList);
table.setStretchAllColumns(true);
table.setShrinkAllColumns(true);
final String tag = "tag";

for (Report tempReport : reportsRepository)
{
TableRow row = new TableRow(this);
TableLayout.LayoutParams tableRowParams=new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT,TableLayout.LayoutParams.WRAP_CONTENT);
tableRowParams.setMargins(0, 10, 0, 10);
row.setLayoutParams(tableRowParams);
row.setClickable(true);
TextView tvName = new TextView(this);
tvName.setBackgroundDrawable(getResources().getDrawable(R.drawable.table_row_shape));
tvName.setText(tempReport.getName());
tvName.setGravity(Gravity.CENTER_HORIZONTAL);
tvName.setTextColor(getResources().getColor(R.color.my_black));
tvName.setTag(tag);
row.addView(tvName);
TextView tvPath = new TextView(this);
tvPath.setBackgroundDrawable(getResources().getDrawable(R.drawable.table_row_shape));
tvPath.setText(tempReport.getPath());
tvPath.setGravity(Gravity.CENTER_HORIZONTAL);
tvPath.setTextColor(getResources().getColor(R.color.my_black));
row.addView(tvPath);
map.put(tempReport.getName(), tempReport);
row.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v)
{
TextView tvName = (TextView) v.findViewWithTag(tag);
Log.d(TAG, "looking for report with name: " + tvName.getText());
Report report = (Report)map.get(tvName.getText());
Log.d(TAG, "The report found: " + report.toString());
Map<String, String> valuesmap = new HashMap<String, String>();
valuesmap.put(GetParametersAsyncTask.REPORTID_PARAM, report.getId());
Log.d(TAG, "passed the following id to the asynctask: "+ report.getId());
GetParametersAsyncTask asyncTask = new GetParametersAsyncTask(ReportsTableActivity.this, ((SGRaportManagerAppObj)getApplication()).getCurrentUrl());
asyncTask.execute(valuesmap);
}
});
table.addView(row);
}

而 xml 文件如下所示:

<FrameLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="55dp" >

<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tableReportsList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:shrinkColumns="*"
android:stretchColumns="*" >

<TableRow
android:layout_height="wrap_content"
android:background="@color/light_gray"
android:textStyle="bold" >

<TextView
android:id="@+id/nameLabel"
android:layout_height="wrap_content"
android:background="@drawable/table_row_shape"
android:gravity="center_horizontal"
android:text="@string/report_name"
android:textColor="@color/my_black"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:textStyle="bold" />

<TextView
android:id="@+id/pathLabel"
android:layout_height="wrap_content"
android:background="@drawable/table_row_shape"
android:gravity="center_horizontal"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:text="@string/report_path"
android:textColor="@color/my_black"
android:textStyle="bold" />
</TableRow>
</TableLayout>
</ScrollView>

看看是否对您有帮助。

关于android - 制作一个带有可点击对象的 2D 可滚动表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15233665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com