0

在我的应用程序中,我有一个 TextView,当用户第一次单击它时,我必须按降序排列数据,当用户再次单击相同的文本视图时,我必须按升序排列数据。有有什么办法可以做到这一点?

我的代码:

public void onClick(View v) {
    // TODO Auto-generated method stub
    boolean flag = false;
    db.open();
    Cursor c;
    if(flag==false)
    {
        c = db.getIncomeTitleDescitem(intent.getStringExtra("grpsdb"));
        startManagingCursor(c);
        flag=true;
    }                   
    else
    {
        System.out.println("inside else");
        c = db.getIncomeTitleAscitem(intent.getStringExtra("grpsdb"));
        startManagingCursor(c);
        flag=false;
    }
    ListView lv=(ListView)findViewById(R.id.listView1);     
    String[] fromdes = new String[] {db.KEY_DATE,db.KEY_DESC,db.KEY_INCOME,db.KEY_TOTAL};
    int[] todes = new int[] {R.id.text1 ,R.id.text3,R.id.text5,R.id.text7};
    SimpleCursorAdapter notes = new SimpleCursorAdapter(IncomeDetails.this, R.layout.columnview, c, fromdes, todes);                          
    lv.setAdapter(notes);  
    db.close();             
}
4

5 回答 5

1

您可以使用setTag()getTag()保持该状态。

默认情况下,将 TextView 设置为tv.setTag("descending");内部onClick()使用getTag()并执行您的工作。

样本,

tv.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View paramView) {
        String order = (String) paramView.getTag();
        if(order.equalsIgnoreCase("descending")){
            // perform descending ordering
            tv.setTag("ascending");
        }
        else if (order.equalsIgnoreCase("ascending")) {
            // perform ascending ordering
            tv.setTag("descending");
        } 
    }
});
于 2012-07-19T08:38:38.390 回答
1

你有按升序和降序排列它们的逻辑吗?

如是,

假设功能arrangeA()arrangeD()分别按升序和降序进行排列。

String lastSet="none";
TextView tv= (TextView) findViewById(R.id.tv);
tv.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        if(lastSet.equals("none")||lastSet.equals("asc")) {
            arrangeD();
            lastSet="desc";
        }
        else {
            arrngeA();
            lastSet="asc";
        }
    }
});
于 2012-07-19T08:38:46.113 回答
1

是的,您可以根据单击更新标志轻松地使用标志进行跟踪。标志您可以保留为布尔值或整数,无论​​您想要什么。供你参考...

boolean flag = false;   // false - first click, true - second click
textView.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        if (flag == false) {
            flag = true;
            // do descending
         } else {
             flag = false;
             // do ascending
         }                
    }
});
于 2012-07-19T08:39:05.470 回答
1

只需放置

boolean flag = false;

在函数调用之上

public void onClick(View v) {

这将完成你的任务

于 2012-07-19T09:08:31.643 回答
0

boolean sortAscend = false

在您的 TextView 中onclicklistener()检查sortAscend并对其进行排序并设置sortAscend = !sortAscend.

这样它会在 asc/desc 中交替排序

于 2012-07-19T08:38:20.667 回答