RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题

全部问题

Martin Hope
Вероника
Asked: 2020-01-09 04:53:59 +0000 UTC

使用 CursorLoader 时过滤 ListView 数据

  • 9

有AutoCompleteTextView和的活动ListView。ListView数据通过其适配器输出。

如何使y方法执行onTextChanged时, in中的AutoCompleteTextView数据ListView变化如下: 即,ListView只有那些以我们输入的字符集开头的词AutoCompleteTextView?我知道您每次都需要更新游标的内容,但我不知道该怎么做。

DBHelper代码

public class DBHeler extends SQLiteOpenHelper {
    private static String DB_PATH = "/data/data/tests.mytest3/databases/";
    private static final String DATABASE_NAME = "dbase.db";
    private static final int DATABASE_VERSION = 1;
    public SQLiteDatabase database;
    private Context myContext;

    final String ruQuery = "SELECT * " + " FROM " + Contract.Entry.TABLE_RUEN;
    final String enQuery = "SELECT * " + " FROM " + Contract.Entry.TABLE_ENRU;

    public DBHeler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        this.myContext = context;
    }

    public Cursor getRuWords() {
        return database.rawQuery(ruQuery, null); 
    }

    public Cursor getEnWords() {
        return database.rawQuery(enQuery, null); 
    }

    public void createDataBase() throws IOException {
        boolean dbExist = checkDataBase();

        if(dbExist){
            //ничего не делать - база уже есть
        }else{
            //вызывая этот метод создаем пустую базу, позже она будет перезаписана
            this.getReadableDatabase();

            try {
                copyDataBase();
            } catch (IOException e) {
                throw new Error("Error copying database");
            }
        }
    }

    private boolean checkDataBase(){
        SQLiteDatabase checkDB = null;
        try {
            String myPath = DB_PATH + DATABASE_NAME;
            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
        } catch(SQLiteException e){
            //база еще не существует
        }
        if(checkDB != null){
            checkDB.close();
        }
        return checkDB != null ? true : false;
    }

    private void copyDataBase() throws IOException{
        InputStream myInput = myContext.getAssets().open(DATABASE_NAME);

        String outFileName = DB_PATH + DATABASE_NAME;

        OutputStream myOutput = new FileOutputStream(outFileName);

        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer))>0){
            myOutput.write(buffer, 0, length);
        }

        myOutput.flush();
        myOutput.close();
        myInput.close();
    }

    public void openDataBase() throws SQLException {
        String myPath = DB_PATH + DATABASE_NAME;
        database = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    }

    @Override
    public synchronized void close() {
        if(database != null)
            database.close();
        super.close();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

合约类

    public class Contract {
        private Contract() {
        };

        public static final class Entry implements BaseColumns {
            public final static String TABLE_RUEN = "ruen";
            public final static String TABLE_ENRU = "enru";

            public final static String _ID = BaseColumns._ID;
            public final static String COLUMN_SLOVO = "word";
            public final static String COLUMN_PEREVOD = "translation";
            public final static String COLUMN_IZBRANNOE = "favorites";
        }
    }

适配器类

public class MySimpleCursorAdapter extends SimpleCursorAdapter {

    private int layout;

    public MySimpleCursorAdapter(Context context, int layout, Cursor cursor, String[] from, int[] to, int flag) {
        super(context, layout, cursor, from, to, flag);
        this.layout = layout;
    }

    public static class ViewHolder {
        public TextView txtBukva;
        public TextView txtPerevod;
        public TextView txtSlovo;
        public ImageButton btnIzbrannoe;

        public ViewHolder(View view) {
            txtBukva = (TextView) view.findViewById(R.id.txtBukva);
            txtSlovo = (TextView) view.findViewById(R.id.txtSlovo);
            txtPerevod = (TextView) view.findViewById(R.id.txtPerevod);
            btnIzbrannoe = (ImageButton) view.findViewById(R.id.btnIzbrannoe);
        }
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(layout, parent, false);
        ViewHolder viewHolder = new ViewHolder(view);
        view.setTag(viewHolder);
        return view;
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {

        ViewHolder holder = (ViewHolder) view.getTag();

        String bukva = cursor.getString(cursor.getColumnIndex(Contract.Entry.COLUMN_SLOVO)).substring(0, 1).toUpperCase();
        String slovo = cursor.getString(cursor.getColumnIndex(Contract.Entry.COLUMN_SLOVO));
        String perevod = cursor.getString(cursor.getColumnIndex(Contract.Entry.COLUMN_PEREVOD));
        String izbrannoe = cursor.getString(cursor.getColumnIndex(Contract.Entry.COLUMN_IZBRANNOE));
        int _ID = cursor.getInt(cursor.getColumnIndex(Contract.Entry._ID));

        TextView txtBukva = (TextView) view.findViewById(R.id.txtBukva);
        TextView txtSlovo = (TextView) view.findViewById(R.id.txtSlovo);
        TextView txtPerevod = (TextView) view.findViewById(R.id.txtPerevod);
        ImageButton btnIzbrannoe = (ImageButton) view.findViewById(R.id.btnIzbrannoe);

        holder.txtBukva.setText(bukva);
        holder.txtSlovo.setText(slovo);
        holder.txtPerevod.setText(perevod);
        holder.btnIzbrannoe.setFocusable(false);

        if (izbrannoe.equals("1")) {
            holder.btnIzbrannoe.setImageResource(R.drawable.icon_star_yellow);
        } else {
            holder.btnIzbrannoe.setImageResource(R.drawable.icon_star_outline_black);
        }

        holder.btnIzbrannoe.setTag(new Slovo(_ID,slovo, perevod,bukva,izbrannoe));
    }
}

主要活动

public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> {

    private EditText txtSearch;
    private Spinner spinner;
    private ListView list;
    private ImageButton btnClear;

    DBHeler db;
    private MySimpleCursorAdapter cursorAdapter;

    final private static int LOADER_RUS = 0;
    final private static int LOADER_ENG = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        db = new DBHeler(this);

        try {
            db.createDataBase();
            db.openDataBase();
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        spinner = (Spinner) findViewById(R.id.spinner);
        txtSearch = (EditText) findViewById(R.id.txtSearch);
        list = (ListView) findViewById(R.id.list);
        btnClear = (ImageButton) findViewById(R.id.btnClear);

        ArrayAdapter<?> adapter = ArrayAdapter.createFromResource(this, R.array.types, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

        String[] from = new String[] {Contract.Entry.COLUMN_SLOVO, Contract.Entry.COLUMN_SLOVO, Contract.Entry.COLUMN_PEREVOD, Contract.Entry.COLUMN_IZBRANNOE};
        int[] to = new int[] {R.id.txtBukva, R.id.txtSlovo, R.id.txtPerevod, R.id.btnIzbrannoe};

        cursorAdapter = new MySimpleCursorAdapter(this, R.layout.item, null, from, to, 0);

        list.setAdapter(cursorAdapter);

        // инициализируем оба загрузчика
        getSupportLoaderManager().initLoader(LOADER_RUS, null, this);
        getSupportLoaderManager().initLoader(LOADER_ENG, null, this);

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int loadID, long l) {
                getSupportLoaderManager().getLoader(loadID).forceLoad(); // обновляем данные в курсоре
            }
            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();

        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Intent intent = new Intent(MainActivity.this, SlovoActivity.class);
                CharSequence strCharSequence = ((TextView)view.findViewById(R.id.txtSlovo)).getText();
                String str = strCharSequence.toString().toLowerCase().trim();
                String selectedItem = spinner.getSelectedItem().toString();
                if (selectedItem.equals("С русского на английский")) {
                    intent.putExtra("slovo", str);
                    intent.putExtra("type", "RU");
                    startActivity(intent);
                } else if (selectedItem.equals("С английского на русский")) {
                    intent.putExtra("slovo", str);
                    intent.putExtra("type", "EN");
                    startActivity(intent);
                }
            }
        });
    }

    public void onFavoriteClick(View view) {

        Slovo data = (Slovo)view.getTag();
        long id = data.id;
        String slovo = data.word;
        String perevod = data.perevod;
        String bukva = data.simbol;
        boolean izbrannoe = data.favorite;

        String selectedItem = spinner.getSelectedItem().toString();
        if (selectedItem.equals("С русского на английский")) {
            if (!izbrannoe) {
                ContentValues values = new ContentValues();
                values.put(Contract.Entry.COLUMN_IZBRANNOE, "1");

                // Вставляем новый ряд в базу данных и запоминаем его идентификатор
                long newRowId = db.database.update(Contract.Entry.TABLE_RUEN, values, Contract.Entry.COLUMN_SLOVO + "= ?", new String[]{slovo});
                //izbrannoe = true;
                // Выводим сообщение в успешном случае или при ошибке
                if (newRowId == -1) { // Если ID  -1, значит произошла ошибка
                    Toast.makeText(this, "Ошибка", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(this, "Добавлено в избранное", Toast.LENGTH_SHORT).show();
                    getSupportLoaderManager().getLoader(LOADER_RUS).forceLoad();
                }
            } else if (izbrannoe) {
                ContentValues values = new ContentValues();
                values.put(Contract.Entry.COLUMN_IZBRANNOE, "0");

                // Вставляем новый ряд в базу данных и запоминаем его идентификатор
                long newRowId = db.database.update(Contract.Entry.TABLE_RUEN, values, Contract.Entry.COLUMN_SLOVO + "= ?", new String[]{slovo});
                //izbrannoe = true;
                // Выводим сообщение в успешном случае или при ошибке
                if (newRowId == -1) { // Если ID  -1, значит произошла ошибка
                    Toast.makeText(this, "Ошибка", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(this, "Удалено из избранного", Toast.LENGTH_SHORT).show();
                    getSupportLoaderManager().getLoader(LOADER_RUS).forceLoad();
                }
            }
        } else if (selectedItem.equals("С английского на русский")) {
            if (!izbrannoe) {
                ContentValues values = new ContentValues();
                values.put(Contract.Entry.COLUMN_IZBRANNOE, "1");

                // Вставляем новый ряд в базу данных и запоминаем его идентификатор
                long newRowId = db.database.update(Contract.Entry.TABLE_ENRU, values, Contract.Entry.COLUMN_SLOVO + "= ?", new String[]{slovo});
                //izbrannoe = true;
                // Выводим сообщение в успешном случае или при ошибке
                if (newRowId == -1) { // Если ID  -1, значит произошла ошибка
                    Toast.makeText(this, "Ошибка", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(this, "Добавлено в избранное", Toast.LENGTH_SHORT).show();
                    getSupportLoaderManager().getLoader(LOADER_ENG).forceLoad();
                }
            } else if (izbrannoe) {
                ContentValues values = new ContentValues();
                values.put(Contract.Entry.COLUMN_IZBRANNOE, "0");

                // Вставляем новый ряд в базу данных и запоминаем его идентификатор
                long newRowId = db.database.update(Contract.Entry.TABLE_ENRU, values, Contract.Entry.COLUMN_SLOVO + "= ?", new String[]{slovo});
                //izbrannoe = true;
                // Выводим сообщение в успешном случае или при ошибке
                if (newRowId == -1) { // Если ID  -1, значит произошла ошибка
                    Toast.makeText(this, "Ошибка", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(this, "Удалено из избранного", Toast.LENGTH_SHORT).show();
                    getSupportLoaderManager().getLoader(LOADER_ENG).forceLoad();
                }
            }
        }
    }

    protected void onDestroy() {
        super.onDestroy();
        db.close();
    }

    static class MyCursorLoader extends CursorLoader {
        Cursor cursor;
        DBHeler dbHeler;
        final int loaderID;

        public MyCursorLoader(Context context, DBHeler dbHeler, int id) {
            super(context);
            this.dbHeler = dbHeler;
            loaderID = id;
        }

        @Override
        protected Cursor onLoadInBackground() {
            switch (loaderID) {
                case LOADER_RUS:
                    cursor = dbHeler.getRuWords();
                    break;
                case LOADER_ENG:
                    cursor = dbHeler.getEnWords();
                    break;
            }
            return cursor;
        }
    }

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        return new MyCursorLoader(this, db, id);
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        cursorAdapter.swapCursor(data);
    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
        cursorAdapter.swapCursor(null);
    }
}

斯洛沃班

public class Slovo {
    long id;
    String word;
    String perevod;
    String simbol;
    boolean favorite;

    public Slovo(long id, String word, String perevod, String simbol, String favorite) {
        this.id = id;
        this.word = word;
        this.perevod = perevod;
        this.simbol = simbol;
        this.favorite = (favorite.equals("1"))? true:false;
    }
}
java
  • 1 个回答
  • 10 Views
Martin Hope
user2455111
Asked: 2020-12-29 12:03:32 +0000 UTC

从字典中排除重复值

  • 9

有一个字典,例如

IDictionary<string, List<Model>>

有一个模型

public class Model 
{ 
   public string Name { get; set;}
   public byte[] Data { get; set;}
}

怎样才能消除整个Dictionary中Name的重复值呢?过滤现有字典。必须删除重复值。那些。如果在列表中的键“Key1”和键“Key2”中有一个具有相同值的名称,则有必要为该键排除该值(哪个都无关紧要)

测试数据

{"key1", {"Name1", <data>}, {"Name2", <data>}, {"Name3", <data>}}
{"key2", {"Name4", <data>}, {"Name2", <data>}, {"Name5", <data>}}

结果

{"key1", {"Name1", <data>}, {"Name2", <data>}, {"Name3", <data>}}
{"key2", {"Name4", <data>}, {"Name5", <data>}}

或者

{"key1", {"Name1", <data>}, {"Name3", <data>}}
{"key2", {"Name4", <data>}, {"Name2", <data>}, {"Name5", <data>}}
c#
  • 2 个回答
  • 10 Views
Martin Hope
Ethernets
Asked: 2020-12-28 19:39:06 +0000 UTC

什么:在 C++ Builder 变量中意味着什么以及如何在 C# 中实现它[重复]

  • 9
这个问题已经在这里得到回答:
C# 中的位域模拟 (1 个答案)
5 年前关闭。

帮我看看是什么意思

:

在下面的变量中,我将给出C++ Builder中的结构:

typedef struct {
    unsigned int nr:8;   //
    unsigned int y:8;    // 1
    unsigned int sm:3;   // 2
    unsigned int d:5;    // 3
    unsigned int m:4;    // 4
    unsigned int r:4;    // 5
} n_def; 

后面的数字到底是什么:?nr:8或者……等等3?5以及如何在 C# 中实现相同的功能?

事实是我需要从二进制文件中读取数据,据我了解,我首先需要读取整个块然后将其拆分成位?在 C# 中,读取是这样完成的:

         using (BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open)))
            {
                // пока не достигнут конец файла
                // считываем каждое значение из файла
                while (reader.PeekChar() > -1)
                {
                    int numb = reader.ReadInt32();
                    uint nr = reader.ReadUInt32(); // переменная которую нужно разбить на биты 
   }
} 

我理解正确吗?实施它的最佳方法是什么?也许最好使用封送处理?谢谢您的反馈

c#
  • 1 个回答
  • 10 Views
Martin Hope
Mikhail Znak
Asked: 2020-12-24 16:07:12 +0000 UTC

删除滚动条控制台 C#

  • 9

我正在控制台 C# 中编写一个迷你游戏。为了更漂亮的显示,我想从控制台的底部和侧面移除滚动条。我没有在控制台的属性中找到这样的时刻。如果有办法请告诉我

c#
  • 1 个回答
  • 10 Views
Martin Hope
αλεχολυτ
Asked: 2020-12-20 18:02:02 +0000 UTC

本地运行时常量

  • 9

在 C++ 中,要定义本地运行时常量,您可以编写:

const auto c = f();

此外,所有更改尝试都c将导致编译错误。

在 C# 中没有这种可能性。您可以readonly以这种方式使用成员,但不能使用局部常量。

为什么会有这样的限制(C++ 中缺少局部常量的原因是什么)以及在 C# 中强制执行局部运行时恒定性的规范解决方案是什么?真的有必要为此创建一个单独的只读接口吗?

c#
  • 2 个回答
  • 10 Views
上一页
下一页

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5