listviewonClickは間違った結果を返します

アンドリー・アファナセンコ

SQLiteデータベースのデータを使用したカスタムリストビューがあります。アイテムの追加と編集ができます。また、ツールバーにSearchVIewがあり、名前でアイテムを検索できます。

問題は、アイテムを編集し、SearchViewを使用してそれを見つけたいときに、onClickメソッドが間違ったID(リストの最初のアイテム)を返すことです。検索を使用しない場合は、すべて問題ありません。例えば:検索なし

探す

私のクラスコード:

public class ProductCategoryActivity extends AppCompatActivity {

private ListView myProductsList;
private DataBaseHelper dataBaseHelper;
private SQLiteDatabase db;
private Cursor productCursor;
private ArrayList<Product> productList;
private int tableId;
private String dbName;

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

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    Intent idOfGroup = new Intent(getIntent());
    tableId = idOfGroup.getIntExtra("table_id", 0);

    myProductsList = (ListView) findViewById(R.id.lvMyProducts);

    switch (tableId) {
        case 1:
            dbName = DataBaseHelper.TABLE_MY_PRODUCTS;
            break;
    }

    //allow adding and editing products if tableId == 1
    if (tableId == 1) {
        myProductsList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //get id by click on list view item
                String sql = "SELECT " + DataBaseHelper.COLUMN_ID + "  FROM " + dbName;
                productCursor = db.rawQuery(sql, null);
                ArrayList<Long> arrayList = new ArrayList<>();
                if (productCursor.moveToFirst()) {
                    do {
                        arrayList.add(Long.parseLong(productCursor.getString(0)));
                    } while (productCursor.moveToNext());
                } else {
                    throw new NullPointerException();
                }
                //sending id to another activity
                Intent intent = new Intent(ProductCategoryActivity.this, ProductAddEditActivity.class);
                intent.putExtra("id", arrayList.get(position));
                startActivity(intent);
            }
        });
    }
    dataBaseHelper = new DataBaseHelper(getApplicationContext());
    //creating db
    dataBaseHelper.create_db();

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.newProduct:
            Intent intent = new Intent(ProductCategoryActivity.this, ProductAddEditActivity.class);
            startActivity(intent);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
public void onResume() {
    super.onResume();
    productList = new ArrayList<>();
    productList.clear();
    db = dataBaseHelper.open();
    //get data from db
    productCursor = db.rawQuery("select * from " + dbName, null);
    setProduct();
}


//product search by name
public Cursor getProductListByKeyword(String search) {
    productList = new ArrayList<>();
    productList.clear();
    db = dataBaseHelper.open();
    //get data from db by word
    productCursor = db.rawQuery("SELECT * FROM " + dbName + " WHERE "
            + DataBaseHelper.COLUMN_NAME + "  LIKE  '%" + search + "%' ", null);
    setProduct();
    return productCursor;
}

private void setProduct() {
    //select  required columns
    if (productCursor != null && productCursor.getCount() != 0) {
        if (productCursor.moveToFirst()) {
            do {
                Product product = new Product();
                product.setProductName(productCursor.getString(productCursor.getColumnIndex(DataBaseHelper.COLUMN_NAME)));

                productList.add(product);
            } while (productCursor.moveToNext());
        }
    }
    productCursor.close();
    ProductListAdapter productListAdapter = new ProductListAdapter(this, productList);
    myProductsList.setAdapter(productListAdapter);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    //the add button is hidden if tableId != 1
    if (tableId != 1) {
        MenuItem menuItem = menu.findItem(R.id.newProduct);
        menuItem.setVisible(false);
    }
    SearchView searchView = (SearchView) menu.findItem(R.id.searchForSee).getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String s) {
            productCursor = getProductListByKeyword(s);
            Toast.makeText(ProductCategoryActivity.this, productCursor.getCount() + " " +
                            getString(R.string.txt_products_found),
                    Toast.LENGTH_LONG)
                    .show();
            return false;
        }
        @Override
        public boolean onQueryTextChange(String s) {
            productCursor = getProductListByKeyword(s);
            return false;
        }
    });
    return true;

}
@Override
public void onDestroy() {
    super.onDestroy();
    db.close();
    productCursor.close();
}
アンドリー・アファナセンコ

onClickメソッドで問題を解決しました:

 myProductsList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //get id by click on list view item
                long productId;
                if (productCursor.moveToPosition(position)) {
                    productId = Long.parseLong(productCursor.getString(0));
                } else {
                    throw new NullPointerException();
                }
                //sending id to another activity
                Intent intent = new Intent(ProductCategoryActivity.this, ProductAddEditActivity.class);
                intent.putExtra("id", productId);
                startActivity(intent);
            }
        });

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

File.isFileは()間違った結果を返しますか?

分類Dev

DATEのOracleSQL比較は間違った結果を返します

分類Dev

集計+平均は間違った結果を返します

分類Dev

Hibernateは間違った結果セットを返し、間違ったクエリを生成します

分類Dev

中間結果を保存しないと、Eigenは間違った結果を返します

分類Dev

ElasticsearchMatchQueryが間違った結果を返しています

分類Dev

SQL Like with wildcardは、特定の文字で間違った結果を返します

分類Dev

Android Studioは、単純な数式の間違った結果を返します

分類Dev

uniqueNは、jの条件で間違った結果を返します

分類Dev

SUM(DISTINCT(column))は、特定の条件で間違った結果を返します

分類Dev

短いClojureコードは間違った結果を返します

分類Dev

mysql WHERE BETWEEN by dateは間違った結果を返しますか?

分類Dev

MPIギャザーは間違った順序で結果を返します

分類Dev

Oracleの "order by"句は、結果を間違った順序で返すか、結果が欠落しています

分類Dev

GROUP BYMONTHは間違った結果をもたらします

分類Dev

Timedelta操作は間違った結果をもたらします

分類Dev

間違った結果を返すSQL

分類Dev

MySQL移動平均は間違った結果を出します

分類Dev

Math.cos()は間違った結果を出します

分類Dev

TOSVersionは間違った結果を出します

分類Dev

Math.powは間違った結果を出します

分類Dev

base64は間違った結果を出します

分類Dev

MySQLクエリは間違った結果を出します

分類Dev

php max()関数は間違った結果を出します

分類Dev

Java Stream.sorted()は間違った結果を出します

分類Dev

OpenCVfilter2dは間違った結果を出します

分類Dev

一致を使用したMySQL全文検索は間違った結果セットを返します

分類Dev

一部の関数は、なしではなく間違った結果を返します

分類Dev

StorageFile.GetImagePropertiesAsync()は、画像メタデータでStorageFileQueryResultを使用すると、間違った結果を返します

Related 関連記事

  1. 1

    File.isFileは()間違った結果を返しますか?

  2. 2

    DATEのOracleSQL比較は間違った結果を返します

  3. 3

    集計+平均は間違った結果を返します

  4. 4

    Hibernateは間違った結果セットを返し、間違ったクエリを生成します

  5. 5

    中間結果を保存しないと、Eigenは間違った結果を返します

  6. 6

    ElasticsearchMatchQueryが間違った結果を返しています

  7. 7

    SQL Like with wildcardは、特定の文字で間違った結果を返します

  8. 8

    Android Studioは、単純な数式の間違った結果を返します

  9. 9

    uniqueNは、jの条件で間違った結果を返します

  10. 10

    SUM(DISTINCT(column))は、特定の条件で間違った結果を返します

  11. 11

    短いClojureコードは間違った結果を返します

  12. 12

    mysql WHERE BETWEEN by dateは間違った結果を返しますか?

  13. 13

    MPIギャザーは間違った順序で結果を返します

  14. 14

    Oracleの "order by"句は、結果を間違った順序で返すか、結果が欠落しています

  15. 15

    GROUP BYMONTHは間違った結果をもたらします

  16. 16

    Timedelta操作は間違った結果をもたらします

  17. 17

    間違った結果を返すSQL

  18. 18

    MySQL移動平均は間違った結果を出します

  19. 19

    Math.cos()は間違った結果を出します

  20. 20

    TOSVersionは間違った結果を出します

  21. 21

    Math.powは間違った結果を出します

  22. 22

    base64は間違った結果を出します

  23. 23

    MySQLクエリは間違った結果を出します

  24. 24

    php max()関数は間違った結果を出します

  25. 25

    Java Stream.sorted()は間違った結果を出します

  26. 26

    OpenCVfilter2dは間違った結果を出します

  27. 27

    一致を使用したMySQL全文検索は間違った結果セットを返します

  28. 28

    一部の関数は、なしではなく間違った結果を返します

  29. 29

    StorageFile.GetImagePropertiesAsync()は、画像メタデータでStorageFileQueryResultを使用すると、間違った結果を返します

ホットタグ

アーカイブ