Android 带有片段的getBaseContext()错误
我正在创建一个待办事项列表。我正在处理数据库部分,以便用户可以键入项目,当他们单击“添加”按钮时,列表将填充。现在,当我使用getBaseContext时,不断出现错误 我在关注这家伙的教程,而我的教程使用的是片段,我不断得到一个错误,我想这是因为我使用片段 我在getBaseContext中遇到一个错误 这是我的FragmentTasks.JavaAndroid 带有片段的getBaseContext()错误,android,sqlite,Android,Sqlite,我正在创建一个待办事项列表。我正在处理数据库部分,以便用户可以键入项目,当他们单击“添加”按钮时,列表将填充。现在,当我使用getBaseContext时,不断出现错误 我在关注这家伙的教程,而我的教程使用的是片段,我不断得到一个错误,我想这是因为我使用片段 我在getBaseContext中遇到一个错误 这是我的FragmentTasks.Java package com.example.navbar; import android.content.Context; import andro
package com.example.navbar;
import android.content.Context;
import android.content.ContentValues;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
/**
* A simple {@link Fragment} subclass.
*
*/
public class FragmentTasks extends ListFragment implements OnClickListener{
public FragmentTasks() {
// Required empty public constructor
}
EditText task;
DataHandler handler;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_tasks, container, false);
Button button = (Button)view.findViewById(R.id.button1);
button.setOnClickListener(this);
task = (EditText)view.findViewById(R.id.editText1);
//return inflater.inflate(R.layout.fragment_tasks, container, false);
/* button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Activity activity = getActivity();
if (activity != null) {
Toast.makeText(activity, R.string.toast_you_just_clicked_a_fragment, Toast.LENGTH_LONG).show();
}
}
});
*/
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
ArrayAdapter adapter=ArrayAdapter.createFromResource(getActivity(), R.array.tasks, android.R.layout.simple_list_item_1);
setListAdapter(adapter);
}
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l){
Toast.makeText(getActivity(), "Item "+i,Toast.LENGTH_SHORT).show();
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String getTasks = task.getText().toString();
handler = new DataHandler(getBaseContext()); **//Error is here!**
handler.open();
long id = handler.insertData(getTasks);
Toast.makeText(getBaseContext(), "Data inserted", Toast.LENGTH_LONG).show(); **//And Here!**
handler.close();
}
}
尝试使用getActivity而不是getBaseContext。承载片段的活动用作片段的上下文 下面是官方的android开发者指南,它解释了如何在片段中获取上下文 以下是相关段落 注意:如果在片段中需要上下文对象,可以调用getActivity。但是,请注意,仅当片段附加到活动时才调用getActivity。当片段尚未附加或在其生命周期结束时被分离时,getActivity将返回null 基于上面的文档,我认为最终的问题是您正在将onClickListener实现为片段的一种方法,因此我不确定该活动是否已经创建。您可以尝试使用getApplicationContext,或者最好将onclicklistener移动到您的onCreateView方法中 更换
button.setOnClickListener(this);
与
尝试使用v.getContext
Toast.makeText(v.getContext(), "Data inserted", Toast.LENGTH_LONG).show();
button.setOnClickListener(new OnClickListener() { ... } );
Toast.makeText(v.getContext(), "Data inserted", Toast.LENGTH_LONG).show();