单击列表视图时,无法在另一个活动中显示sqlite数据库资产中的文本

时间:2018-04-30 18:16:30

标签: java android database sqlite listview

嗨我实际上是新手知道我试图从sqlite数据库获取内容并在listview中显示该内容..当点击listview时它必须在第二个活动中显示描述

public class MainActivity extends Activity {
private ListView lvProduct;
private ListProductAdapter adapter;
private List<Product> mProductList;
private DatabaseHelper mDBHelper;
private Button btnAdd;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    lvProduct = (ListView)findViewById(R.id.listview_product);
    mDBHelper = new DatabaseHelper(this);
    btnAdd = (Button)findViewById(R.id.btnAdd);
    //Check exists database
    File database = getApplicationContext().getDatabasePath(DatabaseHelper.DBNAME);
    if(false == database.exists()) {
        mDBHelper.getReadableDatabase();
        //Copy db
        if(copyDatabase(this)) {
            Toast.makeText(this, "Copy database succes", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "Copy data error", Toast.LENGTH_SHORT).show();
            return;
        }
    }
    //Get product list in db when db exists
    mProductList = mDBHelper.getListProduct();
    //Init adapter
    adapter = new ListProductAdapter(this, mProductList);
    //Set adapter for listview
    lvProduct.setAdapter(adapter);
    lvProduct.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

在第二项活动中获取描述内容的其他内容

            Intent intent=new Intent(MainActivity.this, secondactivity.class);
            intent.putExtra("Listviewclickvalue",columnNames);
            startActivity(intent);
        }
    });
    registerForContextMenu(lvProduct);
    btnAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(getApplicationContext(), AddOrEditActivity.class);
            i.putExtra("Action", "Add");
            startActivity(i);
        }
    });
}

第二项活动

public class secondactivity extends AppCompatActivity {

TextView textview;

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

    textview=(TextView)findViewById(R.id.txtitem);

    String Tempholder=getIntent().getStringExtra("Listviewclickvalue");
    textview.setText(Tempholder);
}
}

回复会很好,并提前感谢你

1 个答案:

答案 0 :(得分:0)

  

在其他内容中添加什么以获取描述内容   secondactivity

典型的方法是从 mProductList 产品获取 rowid 或别名 rowid > 位置指向的元素(传递给onItemClick方法)。然后可以将此单个值(也称为 id )传递给第二个活动,从该活动中检索,然后用于从数据库中获取剩余数据(列)。

rowid 的别名是定义为?? INTEGER PRIMARY KEY的列(带有可选的AUTOINCREMENT关键字),或者可能是?? INTEGER, ...other column definitions.... PRIMARY KEY(??)。哪里??将是列名。

如果产品对象不包含 ID ,那么您可以更改它以使其保留 id 或获取并传递任何值都可以唯一标识相应的行。

您通过意图传递值并检索它们看起来很好看。但是 columnNames ,如果它包含列名而不是内容,则无法识别特定行。

假设产品确实存储了 ID ,并且您有 getId 方法来检索 ID ,那么您可以: -

     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        long id_to_pass =((Product)parent.getItemAtPosition(position)).getId(); //<<<< Get id (recommended)
        //long id_to_pass = mProductList.get(position).getId(); //<<<< Get id (alternative)

        Intent intent=new Intent(MainActivity.this, secondactivity.class);
        //intent.putExtra("Listviewclickvalue",columnNames); //<<<< commented out
        intent.putExtra("Listviewclickvalue",id_to_pass); //<<<< Pass id
        startActivity(intent);
    }

当然,如果您只是想直接传递数据,那么您可以通过与上面提取ID的方式类似的方式从Product中提取数据。但是,这里经常有与&#34相关的问题;但是如何获取id以便我可以删除/更新数据库中的数据。&#34;