如何在Java中从另一个类获取变量?

4

我希望能够在MainActivity类中获取id_categories变量,以便在ListFood类的LoadListFoodbyId(int id)方法中使用。

MainActivity.java

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.list_store_View);
        LoadCategories();
        lv.setOnItemClickListener(new CategoriesClickListener());
}
    // The click listener for ListView in Store List
    private class CategoriesClickListener implements
            ListView.OnItemClickListener {

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

            Categories item = cateAdapter.getItem(position);
            Intent itent = new Intent(getApplicationContext(), ListFood.class);
            itent.putExtra("item", item);
            int id_categories = item.getId(); //i want to get this variable
            String log = "ID: " + id_categories;
            startActivity(itent);
            Log.d("ID: ", log);

        }
    }

ListFood.java

public class ListFood extends Activity {
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_dish);
        LoadListFoodbyId(4); //use variable in here
}
    public void LoadListFoodbyId(int i) {
        DataApdapter mDbHelper = new DataApdapter(this);
        mDbHelper.createDatabase();
        mDbHelper.open();
        ArrayList<Food> listFoodById = mDbHelper.getAllFoodById(i);
        listFoodAdapter = new ListFoodArrayAdapter(this, R.layout.list_dish,
                listFoodById);
        lv.setAdapter(listFoodAdapter);

        mDbHelper.close();

    }

我尝试通过ListFood在mainActivity类中调用LoadListFoodbyId(int i)方法:

ListFood lf = new ListFood(); 

lf.LoadListFoodbyId (id_categories)

尝试另一种方法是在 MainActivity 类中使用变量 id_categories,并在 ListFood 类中通过 MainActivity 引用它:

MainActivity main = new MainActivity(); 
LoadListFoodbyId (main.getId ()), 

但是所有尝试都没有成功。

MainActivity main = new ();LoadListFoodbyId (main.getId ()),你确定你在写Java吗? - Stéphane Bruckert
2
用“意图Extras”发送它。 - Shvet
2
永远不要手动实例化Activity,使用Extras bundle。 - EpicPandaForce
4个回答

3
  1. You add it to the intent.

    Categories item = cateAdapter.getItem(position);
    Intent itent = new Intent(getApplicationContext(), ListFood.class);
    itent.putExtra("item", item);
    int id_categories = item.getId(); //i want to get this variable
    String log = "ID: " + id_categories;
    itent.putExtra("id_categories", id_categories) //you can call your variable whatever you want, I have called it "id_categories" for convenience.
    startActivity(itent);
    Log.d("ID: ", log);
    
    1. Open it in the ListFood class, whenever you need it.

    Bundle b = getIntent().getExtras(); int id_categories = bundle.getInt("id_categories");


2
在您的MainActivity类中定义变量id_categories,例如:
public class MainActivity {

 private int id_categories;
  ...

修改这行代码

 int id_categories = item.getId();

 id_categories = item.getId();

并在MainActivity类中创建一个函数

public int getIdcategories(){
    return id_categories;
}

是的,只是一个剪切和粘贴错误,我已经纠正了,谢谢。 - Mailkov
我该如何在ListFood类中使用getIdcategories()方法?我尝试了MainActivity main = new MainActivity(); LoadListFoodbyId(main.getId()),但结果总是为零。 - Tan Nguyen
ListFood lf = new ListFood(); lf.LoadListFoodbyId(<MainActivity>.getIdcategories()); 列表食品 lf = 新的列表食品(); lf.LoadListFoodbyId(<MainActivity>.getIdcategories()); - Mailkov

2

将其放入主活动的意图中,像这样:

itent.putExtra("id", item.getId());

并在列表中以以下方式检索它
int id=getIntent().getIntExtra("id",0); // 0 is default value if id is not found in intent

2
MainActivityonCreate方法之前声明id_categoriespublic static int id_categories。然后你可以在任何类中通过MainActivity.id_categories来访问它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接