我有一个java类,它将数据添加到我的sqlite db中,如下所示:
public class DataProvider {
public static List<DataItem> dataItemList;
public static Map<String, DataItem> dataItemMap;
static {
dataItemList = new ArrayList<>();
dataItemMap = new HashMap<>();
addItem(new DataItem(null, "Row 1", "Description 1", 3107));
addItem(new DataItem(null, "Row 2", "Description 2", 2519));
}
public static void addItem(DataItem item) {
dataItemList.add(item);
dataItemMap.put(item.getAccountId(), item);
}
}
其中DataItem
是处理数据信息的模型类。
然后我创建了一个新活动,其中包含一个可以使用此类addItem
的按钮:
Button addButton = (Button) findViewById(R.id.button_add);
addButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
addItem(new DataItem(null, "Row 3", "Description 3", 3307));
finish();
}
});
尝试
addItem
静态导入DataProvider
上课,但没有用。我在活动中创建了一个新方法,其中包含用于addItem
的按钮,但仍然没有运气。
private void addItem(DataItem item) {
List<DataItem> dataItemList;
Map<String, DataItem> dataItemMap;
dataItemList = new ArrayList<>();
dataItemMap = new HashMap<>();
dataItemList.add(item);
dataItemMap.put(item.getAccountId(), item);
}
问题
我还能如何导入addItem
以便能够在我的第二项活动中使用onClick
方法吗?
答案 0 :(得分:2)
正如我所见,您的数据结构是静态的,因此可以在导入后随处使用。它不需要在控制器中创建任何方法,数据提供者可以直接在任何地方使用,因此也可以在监听器中使用:
DataProvider.addItem (/* new item */ )
答案 1 :(得分:1)
您应该尝试创建单独的方法并在OnClickListener中调用该方法
private void addItem(DataItem item) {
DataProvider.addItem(item)
}
或者 直接从OnClickListener调用该方法,如
DataProvider.addItem(new DataItem(null, "Row 3", "Description 3", 3307));
并检查导入的addItem方法
答案 2 :(得分:1)
我不确定为什么你不能使用java类&#39;静态方法在不同的活动中。
我的建议 -
1)使Dataprovider类成为抽象,然后让第二个activity的主类扩展它。然后在第二个活动中覆盖那里的方法。
2)在第一个活动中创建Dataprovider类的实例,然后让Dataprovider类实现Serializable接口。然后你可以发送你的对象以及调用你的第二个活动的任何意图。试试这个 -
// send where details is object
ClassName details = new ClassName();
Intent i = new Intent(context, EditActivity.class);
i.putExtra("Editing", details);
startActivity(i);
//receive
ClassName model = (ClassName) getIntent().getSerializableExtra("Editing");
And
Class ClassName implements Serializable {
}
希望这会有所帮助!!
答案 3 :(得分:1)
刚刚调用dataprovider的静态方法,它的工作原理如下
/**
* method which is called on click
* i has reference present in fragment XML
*
* android:onClick="myMethod"
*
* @param v
*/
public void myMethod(View v) {
DataItem item = new DataItem(String.valueOf(new Random().nextInt()), String.valueOf(new Random().nextInt()), String.valueOf(new Random().nextInt()), new Random().nextInt());
DataProvider.addItem(item );
}
但是你的数据提供者将数据存储在内存中,而不是存储在数据库中,我想你把它作为例子:)
尝试示例项目,其简单而有效 https://drive.google.com/open?id=0B2_EaCvs94pPeENtRlM4UURZYTQ