0

我仍然是 Android 开发的初学者,并且会尝试通过我脑海中的模式尽可能清楚地说明我的问题。

此应用程序的目的:
- 我希望用户可以在几个按钮之间进行选择,当单击其中任何一个按钮时,它会根据按钮打开一个包含不同内容的列表视图。例如:如果您单击“Category_1”按钮,则只有具有合适 id 的元素才会出现在列表视图中。

到目前为止,我已经:
- 定义了我的“处理程序”类(扩展 SQLiteOpenHelper):DB 的名称/路径、CRUD 的定义、.getReadableDatabase 等
- 为我的表定义一个类,在我的例子中是“Restaurants.java” getter/setter 和构造函数。- 为我的按钮定义了带有空侦听器的 MainActivity。
- 定义了我的“DatabaseAdapter.java”,我想在其中定义将与数据库通信并从中获取我想要的信息的方法/sql 请求。
- 定义了我的 ListViewActivity,到目前为止没有任何显示。

这是我想要的模式,以及如何尝试优化我的应用程序的想法:
架构

总结一下:
- 我希望每个按钮都有一个监听器,将变量设置为某个值(例如:“如果单击 1,则将 A 的值设置为 1”)并打开 ListViewActivity。
- 将在“...Adapter.java”中定义一个方法,将请求发送到数据库,并将之前定义的变量 A 作为输入。- 然后,当单击按钮时,ListViewActivity 将打开并调用“..Adapter.java”中的方法,并最终显示结果。

所以,这是我的问题:
- 首先,设计是否优化到足以让我的应用程序快速运行?我认为它应该因为所有按钮只打开一个活动,并且所有按钮只定义一种方法。
- 我很难在“...Adapter.java”中定义方法,该方法将从我的 ListViewAcitivity 中调用。输入应该是单击按钮时获得的变量,但我真的不知道如何在一个活动中获取变量,打开第二个活动,通过在第三个活动中使用变量来显示结果...:s
是当我们单击一个按钮并在另一个类中将此变量用作方法的输入时,是否可以将变量设置为某个值?

public findNameInTable(int A){  
string sql = " select NAME from MY_TABLE where CAT1 = " + A;  
c = database.rawQuery(sql, null); }  

提前感谢任何可以帮助我实现我的应用程序的指示、建议或链接,如果有些问题真的听起来是新手,我很抱歉,我开始了!
祝你有美好的一天 !

4

1 回答 1

1

第 1 部分:我发现将变量传递给其他活动的最佳方法是使用putExtra(String, variable);. 假设您在按下按钮时更改了变量名称,然后您可以调用:

YourNewActivityClassName var = new YourNewActivityClassName();
Intent i = new Intent(context, YourNewActivityClassName.class);
i.putExtra("name", name);
startActivity(i);

然后在刚刚创建的activity中,可以在onCreate方法中调用这个:

Intent i = getIntent();
final String name = i.getStringExtra("name");

当然,这是假设在调用 putExtra 之前将变量定义为字符串。

如果您想使用其他变量类型,您可以调用不同的 get***Extra 命令,getIntExtra(int, defaultval)但 putExtra 仍将用于发送它。

第 2 部分:为了调用在按钮单击中分配了变量的方法,我发现最好的方法是使用“持有者类”,这个持有者可以定义为最终的,并且按下按钮将值分配给一个它的插槽。这是我的整数持有人:

public class holder {
    int to;

    public void setTo(int to){
        this.to = to;
    }
    public int getTo(){
        return to;
    }
}

我在我的 on create 中将我的类实例化为 final,然后在列表单击侦听器中final holder hold = new holder(); 调用我的类。hold.setTo(int);当我想获取数据时,我只需调用hold.getTo();并得到我的整数。

这是一个类似的帖子:在公共无效 onClick 之外传递值

希望这可以帮助!麦克风

于 2013-02-28T05:38:44.510 回答