过滤器简单适配器列表视图
问题描述:
嗨我有一个过滤simpleadapterlistview的问题,当我输入编辑文本应用程序不断崩溃请帮助我。过滤器简单适配器列表视图
//这里是我的代码
public class MainActivity extends ListActivity {
// TextView lbl;
DBController controller = new DBController(this);
Button btnimport;
Button btnexport;
Button btnsearch;
EditText search;
ListView lv;
final Context context = this;
ListAdapter adapter;
ArrayList<HashMap<String, String>> myList;
public static final int requestcode = 1;
public final static String ID_EXTRA1 = "com.example.ansiuser.uploadfile.MainActivity.Id";
public final static String ID_EXTRA = "com.example.ansiuser.uploadfile.MainActivity.Category";
public final static String ID_EXTRA2 = "com.example.ansiuser.uploadfile.MainActivity.Code";
public final static String ID_EXTRA3 = "com.example.ansiuser.uploadfile.MainActivity.Description";
public final static String ID_EXTRA4 = "com.example.ansiuser.uploadfile.MainActivity.Unit";
public final static String ID_EXTRA5 = "com.example.ansiuser.uploadfile.MainActivity.Quantity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
search = (EditText)findViewById(R.id.searchtext);
btnimport = (Button) findViewById(R.id.btnupload);
btnexport = (Button) findViewById(R.id.btnexport);
lv = getListView();
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView cat;
TextView code;
TextView desc;
TextView unit;
TextView quan;
Intent intent = new Intent(getApplicationContext(), Main2Activity.class);
cat = (TextView) view.findViewById(R.id.txtproductcompany);
String gory = cat.getText().toString();
intent.putExtra(ID_EXTRA, gory);
code = (TextView) view.findViewById(R.id.txtproductname);
String deco = code.getText().toString();
intent.putExtra(ID_EXTRA2, deco);
desc = (TextView) view.findViewById(R.id.txtproductprice);
String csed = desc.getText().toString();
intent.putExtra(ID_EXTRA3, csed);
unit = (TextView) view.findViewById(R.id.txtunit);
String noti = unit.getText().toString();
intent.putExtra(ID_EXTRA4, noti);
quan = (TextView) view.findViewById(R.id.txtquan);
String quanti = quan.getText().toString();
intent.putExtra(ID_EXTRA5, quanti);
intent.putExtra(ID_EXTRA1 , String.valueOf(id + 1));
startActivity(intent);
}
});
btnexport.setOnClickListener(new View.OnClickListener(){
SQLiteDatabase database = controller.getReadableDatabase();
Cursor c = null;
@Override
public void onClick (View v){
try
{
c = database.rawQuery("Select * FROM Countsheet" , null);
int rowcount = 0;
int colcount = 0;
File sdCardDir = Environment.getExternalStorageDirectory();
String filename = "/Count2.csv";
File saveFile = new File(sdCardDir,filename);
FileWriter fileWriter = new FileWriter(saveFile);
BufferedWriter bw = new BufferedWriter(fileWriter);
rowcount = c.getCount();
colcount = c.getColumnCount();
if (rowcount > 0)
c.moveToFirst();
for (int i = 0 ; i < colcount; i++)
{
if (i != colcount -1){
bw.write(c.getColumnName(i) + ",");
}
else {
bw.write(c.getColumnName(i));
}
}
bw.newLine();
for (int i = 0; i < rowcount;i++){
c.moveToPosition(i);
for (int j = 0;j < colcount;j++){
if (j != colcount-1)
{
bw.write(c.getString(j)+ ",");
}else
{
bw.write(c.getString(j));
}
}
bw.newLine();
bw.flush();
// lbl.setText("Exported Successfully.");
}
}
catch (Exception ex)
{
if (database.isOpen()){
database.close();
// lbl.setText(ex.getMessage().toString());
}
}finally {
}
}
});
btnimport.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent fileintent = new Intent(Intent.ACTION_GET_CONTENT);
fileintent.setType("gagt/sdf");
try {
startActivityForResult(fileintent, requestcode);
} catch (ActivityNotFoundException e) {
// lbl.setText("No activity can handle picking a file. Showing alternatives.");
}
}
});
myList= controller.getAllProducts();
if (myList.size() != 0) {
ListView lv = getListView();
ListAdapter adapter = new SimpleAdapter(MainActivity.this, myList,
R.layout.v, new String[]{"Category", "Code", "Description" , "Unit" , "Quantity"}, new int[]{
R.id.txtproductcompany, R.id.txtproductname, R.id.txtproductprice , R.id.txtunit , R.id.txtquan});
setListAdapter(adapter);
// lbl.setText("");
}
search.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
((SimpleAdapter)MainActivity.this.adapter).getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
}
//这里是日志错误
E/AndroidRuntime:致命异常:主要 过程:com.example.ansiuser.uploadfile,PID:14657 java.lang.NullPointerException:试图调用虚拟方法'android.widget.Filter android.widget.SimpleAdapter.getFilter()'对null对象引用 at com.example.ansiuser.uploadfile.MainActivity $ 2.onTextChanged( MainActivity.j ava:111)
答
您的适配器未初始化。使适配器全局并在onCreate中进行初始化。
adapter = new SimpleAdapter(MainActivity.this, yourList, ...)
您正在创建一个局部变量再次 'ListAdapter适配器=新SimpleAdapter(..)' 改用早先声明的全局变量!更改为 'adapter = new SimpleAdapter(..)' –
SIR谢谢你为你的孩子做了许多工作:) – RaRa