【问题标题】:Sorting tables row-wise in a TableLayout?在 TableLayout 中按行对表格进行排序?
【发布时间】:2017-10-29 09:27:02
【问题描述】:

我正在使用 TableLayout 在 Android 中显示表格。我想在单击按钮时对表格进行排序。这是我尝试过的。但它对每一列进行排序。我想要的是根据列对行进行排序?

private View.OnClickListener msg = new View.OnClickListener() {
 public void onClick(View v) {

  ArrayList < String > sortobj = new ArrayList < String > ();
  ArrayList < String > sortobj1 = new ArrayList < String > ();
  ArrayList < String > sortobj2 = new ArrayList < String > ();
  ArrayList < String > sortobj3 = new ArrayList < String > ();

  for (int i = 0; i <= listobj.size(); i++) {

   sortobj.add(listobj.get(i).get(TAG_Name));
   sortobj1.add(listobj.get(i).get(TAG_Abbr));
   sortobj2.add(listobj.get(i).get(TAG_Area));
   sortobj3.add(listobj.get(i).get(TAG_Capital));

   if (listobj.get(i).get(TAG_Name).equals("West Bengal"))

    break;
  }

  Collections.sort(sortobj, Collections.reverseOrder());
  Collections.sort(sortobj1, Collections.reverseOrder());
  Collections.sort(sortobj2, Collections.reverseOrder());
  Collections.sort(sortobj3, Collections.reverseOrder());

  table = (TableLayout) findViewById(R.id.mytable);

  Log.e(TAG, "Sorted in reverse order................ :");

  for (int i = 0; i < sortobj.size(); i++) {
   TableRow row = new TableRow(getApplicationContext());

   TextView tv0 = new TextView(getApplicationContext());
   TextView tv1 = new TextView(getApplicationContext());
   TextView tv2 = new TextView(getApplicationContext());
   TextView tv3 = new TextView(getApplicationContext());
   row.setLayoutParams(new TableRow.LayoutParams(
    TableRow.LayoutParams.WRAP_CONTENT,
    TableRow.LayoutParams.MATCH_PARENT));

   tv0.setText(sortobj.get(i));
   tv1.setText(sortobj1.get(i));
   tv2.setText(sortobj2.get(i));
   tv3.setText(sortobj3.get(i));

   row.addView(tv0);
   row.addView(tv1);
   row.addView(tv2);
   row.addView(tv3);

   table.addView(row, new TableLayout.LayoutParams(
    TableLayout.LayoutParams.WRAP_CONTENT,
    TableLayout.LayoutParams.MATCH_PARENT));
  }
 }
};

【问题讨论】:

  • 你必须手动完成。
  • @AhamadAnees 它不能以编程方式完成吗?
  • 我不知道为什么人们将我的问题标记为否定?!他们不能回答所以他们给负分?我的意思是为什么??
  • 是的,你可以。请包含您将数据添加到表中的代码。
  • 如果人们认为该问题没有表现出任何努力或研究,或者质量低下,他们可以投反对票。不要认为它是消极的。 :-) 你仍然可以改进它

标签: java android tableview tablelayout columnsorting


【解决方案1】:

@Bertram Gilfoyle 很好地解释了问题的第一部分

对于第二部分,您应该使用removeAllViews() 而不是在循环中使用removeView()。如果您的表格包含与上一个问题中解释的Row 类或类似类无关的标题,您可以在将行添加回表格之前使用单独的函数来膨胀标题。

【讨论】:

    【解决方案2】:

    问题一:

    正在对每一列进行排序

    解决方案:

    排序行而不是单元格。
    包含此类并像这样创建 ArrayList List &lt; Row &gt; rows= new ArrayList &lt; Row &gt; ();

    class Row implements Comparable<Row>{
        String Abb;
        String Area;
        String Capital;
        
        public String getName() {
            return Name;
        }
    
        public void setName(String name) {
            Name = name;
        }
    
        String Name;
    
        public String getAbb() {
            return Abb;
        }
    
        public void setAbb(String abb) {
            Abb = abb;
        }
    
        public String getArea() {
            return Area;
        }
    
        public void setArea(String area) {
            Area = area;
        }
    
        public String getCapital() {
            return Capital;
        }
    
        public void setCapital(String capital) {
            Capital = capital;
        }
    
        
        @Override
        public int compareTo(@NonNull Row o) {
            return this.Name.compareTo(o.Name);
        }
    }
    

    现在您可以通过这种方式访问​​每一列:String Name = rows.get(index).getName();
    rows.get(index).setName("Kerala");

    然后进行排序,只需输入rows.sort();



    问题 2:

    行正在追加到现有表

    解决方案:

    在添加已排序的行之前,在循环中使用 removeView() 删除所有行

    【讨论】:

    • 我尝试删除,但只有最后一行表格被删除。
    • removeView() 只删除一列。你必须把 table.removeView(table.getChildAt(index));在一个循环中。随意发布结果
    • 我可以更新数据 onClick() 但无法按行对数据进行排序:(
    • 我正在尝试。一旦我完成了我的代码,我会通知你的。顺便说一句,感谢你的回复 :)
    • 谢谢我做到了!但我以我的方式做到了,我使用了一个数组字符串(Z),我在其中存储了(listobj.get(i).get(var))+(listobj.get(i).get(var2)).. ...然后使用 Collections.sort(Z,Collections.reverseOrder()); 对数据进行排序
    猜你喜欢
    • 1970-01-01
    • 2020-12-25
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多