Java 如何在单独的活动中打开自定义ListView项?

Java 如何在单独的活动中打开自定义ListView项?,java,listview,android-studio,android-sqlite,Java,Listview,Android Studio,Android Sqlite,我已经尽可能多地浏览了其他帖子,虽然这可能是一个简单的问题,但就我的一生而言,我不知道如何让它发挥作用。我有一个客户数据库,包括他们的姓名、地址等 我希望能够从我的自定义ListView中选择一个客户,并在单独的活动中查看他们的所有数据库信息。目前,我不能让它给我任何超过第一个记录 如果你能看出我做错了什么,任何建议都会很有帮助。 我对Java相当陌生,所以请对我放轻松:P我现在最好的猜测是我需要创建一个新的游标,但我有点迷路了 代码附在下面 数据库查看器.java public class D

我已经尽可能多地浏览了其他帖子,虽然这可能是一个简单的问题,但就我的一生而言,我不知道如何让它发挥作用。我有一个客户数据库,包括他们的姓名、地址等

我希望能够从我的自定义ListView中选择一个客户,并在单独的活动中查看他们的所有数据库信息。目前,我不能让它给我任何超过第一个记录

如果你能看出我做错了什么,任何建议都会很有帮助。 我对Java相当陌生,所以请对我放轻松:P我现在最好的猜测是我需要创建一个新的游标,但我有点迷路了

代码附在下面

数据库查看器.java

public class DatabaseViewer extends AppCompatActivity{

TextView DisplayName;
TextView DisplayID;
TextView DisplayMarks;
TextView DisplayAddress;
DatabaseHelper mydb = new DatabaseHelper(this);
ListView customerlist;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_database_viewer);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    customerlist = (ListView) findViewById(R.id.ListViewCustomers);

    populateDatabase();
    customerlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int i, long l) {
            DisplayID = (TextView)  findViewById(R.id.TVCUSTOMERNAME);
            DisplayMarks = (TextView)  findViewById(R.id.TVADDRESS);
            DisplayName = (TextView)  findViewById(R.id.TVID);
            DisplayAddress = (TextView)  findViewById(R.id.TVMARKS);

            // NEED TO MAKE A CURSOR THAT GETS ALL ROWS NOT COLUMNS LIKE BELOW.
            int c1 = mydb.getallrows().getPosition();
            // 35 ROWS 4 COLUMNS.

            String item = String.valueOf(parent.getItemAtPosition(i));


            Intent clientViewIntent = new Intent(DatabaseViewer.this, ClientViewer.class);

            clientViewIntent.putExtra("Client ID", c1);
            startActivity(clientViewIntent);
        }
    });
}

private void populateDatabase(){
    Cursor c = mydb.getallrows();
    customerlist = (ListView) findViewById(R.id.ListViewCustomers);
    String[] fromfieldnames = new String[] {DatabaseHelper.COL_1, DatabaseHelper.COL_2, DatabaseHelper.COL_3, DatabaseHelper.COL_4};
    int[] tofieldnames = new int[] {R.id.TVCUSTOMERNAME, R.id.TVADDRESS, R.id.TVMARKS, R.id.TVID};
    SimpleCursorAdapter adapter;
    adapter = new SimpleCursorAdapter(getBaseContext(), R.layout.custom_db_viewer_row, c, fromfieldnames, tofieldnames, 0);
    customerlist.setAdapter(adapter);
}

public void OnClientLongPress(){
    // Function to Open up Client Information in a new activity.
    // Step 1, Use data from Client to pull up Full Client Records.
    // Step 2, Send Data in Intent Extras.
    Intent clientVIewIntent = new Intent(DatabaseViewer.this, ClientViewer.class);
    clientVIewIntent.putExtra("Client ID", customerlist.getSelectedItemId());
    startActivity(clientVIewIntent);
}
  public class ClientViewer extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_client_viewer);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.inflateMenu(R.menu.menu_invoice_creator);

        Bundle NameIntentData = getIntent().getExtras();
        if (NameIntentData==null){
            return;
        }
        int IntentDataID = NameIntentData.getInt("Client ID");
        String IntentDataName = NameIntentData.getString("Client Name");
        String IntentDataAddress = NameIntentData.getString("Client Address");

        final TextView IDBar = (TextView) findViewById(R.id.ClientViewerIDTV);
        final TextView Namebar = (TextView) findViewById(R.id.ClientViewerNameTV);
        final TextView AddressBar = (TextView) findViewById(R.id.ClientViewerAddressTV);

        Namebar.setText(Integer.toString(IntentDataID));
        IDBar.setText(IntentDataName);
        AddressBar.setText(IntentDataAddress);

    }
}

非常感谢你们的时间和努力,伙计们。真的迫不及待地想听到你的回音

获取客户端onClick的ID,该ID与数据库中存储的ID相同且唯一 然后,将其传递给另一个活动 传递id参数并基于该id获取所有数据并显示..不要通过intent传递所有数据只需传递一个键并获取所有数据并显示

希望这对你有帮助

谢谢

TextView textview =((TextView)view.findViewById(R.id.tvInVisitorName)).getText().toString();

在onClick上使用此选项,并获得这样的文本视图数据。

解决了此问题,这主要归功于Anamica

代码

String a = Long.toString(l);

Intent clientViewIntent = new Intent(DatabaseViewer.this, 
ClientViewer.class);

clientViewIntent.putExtra("Client ID", a);
startActivity(clientViewIntent);

帮我找到了我需要的地方。(显示物品Id)再次感谢各位

谢谢阿纳米卡!我也尝试过这样做,通过这个方法clientViewIntent.putExtra(“Client ID”,customerlist.getItemIdAtPosition(1));出于某种原因,它总是给我数字0。有什么想法吗?我也尝试过一些方法,比如clientViewIntent.putExtra(“客户ID”,customerlist.getAdapter().getItem(i.toString());没有成功对不起,你说的“你的听众不为我工作”是什么意思?有人有进一步的想法吗?也许我可以通过点击获得客户Id?再次感谢朋友,完美的awnser。我会试试这个,让你知道它是怎么回事。你帮了大忙。我早些时候试过类似的东西,但我没有在onclick中初始化。再次感谢!已尝试通过此方法使用此修复程序String t=DisplayID.getText().toString();//需要创建一个游标,以获取所有行,而不是下面的列。//35行4列。Intent clientViewIntent=newintent(DatabaseViewer.this,ClientViewer.class);clientViewIntent.putExtra(“客户ID”,t);只是现在我似乎一直在获得ID 1,如果我的答案对你有帮助,你也可以批准我的答案