Не удается отобразить текст из ресурсов базы данных sqlite в другом действии при нажатии на просмотр списка - PullRequest
0 голосов
/ 30 апреля 2018

Привет iam, фактически новичок в android iam, пытающийся получить контент из базы данных sqlite и показать, что контент в просмотре списка .. при щелчке по просмотру списка он должен показать описание во втором действии

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 голосов
/ 01 мая 2018

Что нужно добавить в другое, чтобы получить описание содержания в secondactivity

Типичным способом было бы получить rowid или псевдоним rowid из Product в mProductList , элемент которого как указывает позиция (передается методу onItemClick). Это единственное значение (также известное как id ) может быть передано во второе действие, извлечено из этого действия и затем использовано для получения оставшихся данных (столбцов) из базы данных.

Псевдоним rowid будет столбцом, определенным как ?? INTEGER PRIMARY KEY (с необязательным ключевым словом AUTOINCREMENT), или это может быть ?? INTEGER, ...other column definitions.... PRIMARY KEY(??). Куда ?? будет именем столбца.

Если объект Product не содержит id , вы можете либо изменить его так, чтобы он содержал id , либо получить и передать любые значения, которые делают однозначно идентифицировать соответствующий ряд.

Передача значений через намерение и их извлечение выглядят хорошо. Однако columnNames, если он содержит имена столбцов, а не содержимое, не сможет идентифицировать конкретную строку.

Предполагая, что Product сохраняет 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);
    }

Конечно, если вы просто хотите передать данные напрямую, вы можете извлечь их из Продукта аналогично тому, как идентификатор был извлечен выше. Тем не менее, здесь часто возникают вопросы, связанные с «но как мне получить идентификатор, чтобы я мог удалять / обновлять данные в базе данных».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...