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

时间:2013-03-05 20:40:33

标签: android click android-gridview android-tablelayout android-scroll

我正在尝试制作一个充满物品的桌子/网格。到目前为止,我已经实施了Fuzzical Logic提议的GridView。这是一个image of the result。我可以向两个方向滚动。

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

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

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

Gordak

1 个答案:

答案 0 :(得分: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>

看看你是否觉得它有用。