1

我正在尝试制作一个充满项目的表格/网格。到目前为止,我已经实现了Fuzzical LogicGridView提出的a 。这是结果的图像。我可以双向滚动。

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

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

我真的很喜欢 GridView,因为它易于管理,但缺少 2D 滚动。任何想法 ?

戈尔达克

4

1 回答 1

1

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

    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>

看看你是否觉得它有帮助。

于 2013-03-05T20:46:47.463 回答