【问题标题】:How to strike through entry in ListView?如何在 ListView 中删除条目?
【发布时间】:2012-06-16 06:06:10
【问题描述】:

我使用 ListViewSimpleCursorAdapter 来显示我的 DB-Entries。 到目前为止一切正常:

public void LoadListView(){
    Cursor mCursor = mDbHelper.fetchAllFahrtenbuch();
    if (mCursor != null){     
        startManagingCursor(mCursor);
        mCursor.moveToFirst();
        ListAdapter adapter = new SimpleCursorAdapter(this,
                R.layout.fahrten_anzeigen_list_view, 
                mCursor,
                new String[] { "_id", mCursor.getColumnName(6), mCursor.getColumnName(1), mCursor.getColumnName(14), mCursor.getColumnName(15), mCursor.getColumnName(16), mCursor.getColumnName(17), mCursor.getColumnName(20)},
                new int[] { R.id.textView15, R.id.textView1, R.id.TextView3, R.id.textView5, R.id.textView6, R.id.textView9, R.id.textView10, R.id.textView13});
        setListAdapter(adapter);
        registerForContextMenu(getListView());              
        }
}

如果在条目中收到特殊值,我想要做的是删除条目。 如果mCursor.getColumnName(6) 的值为0,我想删除ListView 中的整个条目

这可能吗?
我该怎么做?

【问题讨论】:

  • 你是什么意思“贯穿整个条目”?
  • 如果您使用的是 unicode,您可以使用它来删除线。 (见Wikipedia)。

标签: android android-listview adapter simplecursoradapter


【解决方案1】:

给你。

textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

【讨论】:

    【解决方案2】:

    在您的适配器上设置SimpleCursorAdapter.ViewBinder,看看是否该绑定第 6 列的数据。如果您在该列并且它具有所需的值,则删除该条目:

    adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
    
         public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
              if (view.getId() == R.id.textView6) {
                  TextView tv = (TextView) view;
                  // bind the text to this TextView(I assume that it's a TextView)
                  tv.setText(cursor.getString(cursor.getColumnIndex(columnIndex))); 
                  // check if it is the special value.
                  // if it is strike through this entry, whatever that means
                  return true;
              }
              return false;
         }
    
    });
    setListAdapter(adapter);
    

    【讨论】:

      【解决方案3】:

      是的,你可以为此你需要为列表视图制作自定义 daapter,其中在检查你的删除条件后的 getView() 方法中,你可以将第一个文本设置为你的文本视图,然后用于像

      这样的文本视图
       yourtextview.setPaintFlags(yourtextview.getPaintFlags()|Paint.STRIKE_THRU_TEXT_FLAG);
      

      【讨论】:

        【解决方案4】:

        在你的文本中使用 html 标签<strike>

        <strike>This is a line</strike> 
        

        这是一行

        public void LoadListView(){
            Cursor mCursor = mDbHelper.fetchAllFahrtenbuch();
            if (mCursor != null){     
                startManagingCursor(mCursor);
                mCursor.moveToFirst();
                String data  = new String[] { "_id", mCursor.getColumnName(6), mCursor.getColumnName(1), mCursor.getColumnName(14), mCursor.getColumnName(15), mCursor.getColumnName(16), mCursor.getColumnName(17), mCursor.getColumnName(20);
                if (mCursor.getColumnName(6).equals("0") {
                   data =  new String[] { "_id", "<strike>"+mCursor.getColumnName(6)+"</strike>", "<strike>"+mCursor.getColumnName(1)+"</strike>", "<strike>"+mCursor.getColumnName(14)+"</strike>", "<strike>"+mCursor.getColumnName(15)+"</strike>", "<strike>"+mCursor.getColumnName(16)+"</strike>", "<strike>"+mCursor.getColumnName(17)+"</strike>", "<strike>"+mCursor.getColumnName(20)+"</strike>";
                }
            ListAdapter adapter = new SimpleCursorAdapter(this,
                    R.layout.fahrten_anzeigen_list_view, 
                    mCursor,
                    data},
                    new int[] { R.id.textView15, R.id.textView1, R.id.TextView3, R.id.textView5, R.id.textView6, R.id.textView9, R.id.textView10, R.id.textView13});
            setListAdapter(adapter);
            registerForContextMenu(getListView());              
            }
        

        }

        【讨论】:

        • 我需要的是在运行时突破。我在适配器中显示我的数据库的所有条目。当条目(例如“mCursor.getColumnName(6)”为“0”时,我想删除为条目“R.id.textView15、R.id.textView1、R.id.TextView3、 R.id.textView5、R.id.textView6、R.id.textView9、R.id.textView10、R.id.textView13"。不确定我的意思是否清楚......希望如此。
        • 是的,所以无论你有什么文字,你都可以在开头附加&lt;strike&gt;,在最后附加&lt;/strike&gt;
        【解决方案5】:

        您可以在getView 中这样做:

            if (strikethroughState[position] == 1) {            // your if condition
                first.setPaintFlags(first.getPaintFlags()      // set strikethrough on TextView1
                        | Paint.STRIKE_THRU_TEXT_FLAG);
                second.setPaintFlags(second.getPaintFlags()
                        | Paint.STRIKE_THRU_TEXT_FLAG);
                third.setPaintFlags(third.getPaintFlags()
                        | Paint.STRIKE_THRU_TEXT_FLAG);
                fourth.setPaintFlags(third.getPaintFlags()
                        | Paint.STRIKE_THRU_TEXT_FLAG);
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-03
          • 2021-10-27
          • 2014-10-29
          • 2020-11-14
          相关资源
          最近更新 更多