2017-08-29 15 views
0

私はいくつかのデータをユーザに提示します。このデータを提示する
最も論理的な方法は、テーブルと私は本当に材料設計テーブルのようである:2次元リストビューを実装する方法

Material Design Data Table

アイテムの数はので、私はListFragmentようにそれを実装すると思って異なります。私が持っている問題は、列の数も変化していることです。 これについていくつかの情報を調べようとしましたが、これを実装する方法は実際には見つかりません。私は別のListFragmentをもう一方の内部に作成する必要がありますか?

これは、これがもっと複​​雑になるはずです。

+0

カラムの数は固定されていますか? –

+2

私はGridViewが見えるかもしれないと思っています。それはあなたが列数を選択できるようにします:https://www.tutorialspoint.com/android/android_grid_view.htm – jampez77

+0

@PronoyMukherjee "問題は、列の数がまた変化する "いいえ – Ravenix

答えて

3

これをゼロから作成して解決しました。

黒いフラグメントを作成し、プログラムでTableRowsとTextViewsを追加したXMLにTableLayoutを追加しました。

私はタイトルで新しいフラグメントを作成するために、newInstanceメソッドを使用したDataTable javaファイルで
<TableLayout 
    android:id="@+id/dataTableLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginTop="64dp"> 
</TableLayout> 

、偶然にとしてヘッダおよびデータ:私はすべてのTableRowsを作成onCreateView方法で

public static DataTable newInstance(ArrayList<String> headers, ArrayList<ArrayList<String>> data, String title) { 
    DataTable fragment = new DataTable(); 
    fragment.setTableTitle(title); 
    fragment.setHeaders(headers); 
    fragment.setData(data); 
    return fragment; 
} 

およびTextViews。私はループのための2つを追加した理由thatsのヘッダとデータと異なることをやってみたかった

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_data_table, container, false); 

    TableLayout tableContainer = view.findViewById(R.id.dataTableLayout); 

    LinearLayout ll = new LinearLayout(this.getContext()); 
    ll.setBackground(ContextCompat.getDrawable(this.getContext(),R.drawable.bottom_border)); 

    tableContainer.addView(ll); 

    for (int headerCount = 0; headerCount < columns; headerCount++){ 
     TextView tvn = new TextView(this.getContext()); 
     tvn.setText(headers.get(headerCount)); 
     tvn.setLayoutParams(new TableLayout.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f)); 

     tvn.setPadding(24,10,10,10); 
     tvn.setMinWidth(200); 
     tvn.setTextColor(ContextCompat.getColor(this.getContext(),R.color.table_header_font_color)); 
     tvn.setTextSize(getResources().getDimension(R.dimen.data_table_text_size_header)); 
     ll.addView(tvn); 
    } 

    for(int rowCount = 0 ; rowCount < rows-1 ; rowCount++){ 
     LinearLayout lld = new LinearLayout(this.getContext()); 

     tableContainer.addView(lld); 
     for(int columnCount = 0; columnCount < columns; columnCount++){ 
      TextView tvd = new TextView(this.getContext()); 
      tvd.setText(data.get(rowCount).get(columnCount)); 
      tvd.setLayoutParams(new TableLayout.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f)); 
      tvd.setPadding(24,10,10,10); 
      tvd.setTextColor(ContextCompat.getColor(this.getContext(),R.color.table_data_font_color)); 
      lld.addView(tvd); 
     } 
     if(rowCount+2 < columns){ 
      lld.setBackground(ContextCompat.getDrawable(this.getContext(),R.drawable.bottom_border)); 
     } 
    } 
    if(tableTitle != null){ 
     TextView tableTitleVw = (TextView)view.findViewById(R.id.table_header); 
     tableTitleVw.setText(tableTitle); 
    } 

    return view; 
} 

、私はあなただけの1つのループが十分で、データを追加したいです。

あなたがテーブルをソートする必要がある場合、あなたは私が見つけたライブラリを使用することができます:私は別のライブラリに依存するようにしたくなかったと私は私が実装理由ですこれらすべての余分な機能を必要としないhttps://github.com/ISchwarz23/SortableTableView

をそれは自分。

関連する問題