2014-05-14 50 views
0

我在可折叠view.when的操作栏中有一个编辑文本,当我在基于文本观察者的编辑文本中输入名称时,它必须显示名称。其显示pointer.can任何一个空引导我哪里出错了基于编辑文本的列表视图不会更改

MainActivity.java

package com.example.filterlistview; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Locale; 

import android.annotation.SuppressLint; 
import android.annotation.TargetApi; 
import android.app.Activity; 
import android.content.Context; 
import android.os.Build; 
import android.os.Bundle; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.MenuItem.OnActionExpandListener; 
import android.view.inputmethod.InputMethodManager; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.LinearLayout; 
import android.widget.ListView; 


@SuppressLint("NewApi") 
@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public class MainActivity extends Activity{ 

    ListView lv; 
    CustomAdapter adapter; 

    ArrayList<String> name; 
    ArrayList<String> comp; 
    ArrayList<String> mobile; 
    ArrayList<String> address,pincode; 

    List<HashMap<String, String>> list; 

    ArrayList<MyModel> a_list = new ArrayList<MyModel>(); 
    EditText searchView; 

    EditText editsearch; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final LinearLayout rel = (LinearLayout)findViewById(R.id.myrelative); 
     rel.setVisibility(View.VISIBLE); 

     name = new ArrayList<String>(); 
     comp = new ArrayList<String>(); 
     mobile = new ArrayList<String>(); 
     address = new ArrayList<String>(); 
     pincode = new ArrayList<String>(); 

     name.add("Giri"); 
     name.add("palani"); 
     name.add("Lawrence"); 
     name.add("Giri"); 
     name.add("palani"); 
     name.add("Lawrence"); 
     name.add("Giri"); 
     name.add("palani"); 
     name.add("Lawrence"); 


     comp.add("sri ram"); 
     comp.add("sri ram"); 
     comp.add("sri ram"); 
     comp.add("sri ram"); 
     comp.add("sri ram"); 
     comp.add("sri ram"); 
     comp.add("sri ram"); 
     comp.add("sri ram"); 
     comp.add("sri ram"); 

     mobile.add("900121233"); 
     mobile.add("900121233"); 
     mobile.add("900121233"); 

     mobile.add("900121233"); 
     mobile.add("900121233"); 
     mobile.add("900121233"); 

     mobile.add("900121233"); 
     mobile.add("900121233"); 
     mobile.add("900121233"); 



     for(int i=0;i<name.size();i++) 
     { 
      MyModel mp = new MyModel(name.get(i), comp.get(i), mobile.get(i)); 
      a_list.add(mp); 
     } 

     lv = (ListView) findViewById(R.id.list); 
     CustomAdapter adapter= new CustomAdapter(MainActivity.this, a_list); 
     adapter.notifyDataSetChanged(); 


     lv.setAdapter(adapter); 

     lv.setTextFilterEnabled(true); 

    } 

    @SuppressLint("NewApi") 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 



     editsearch = (EditText) menu.findItem(R.id.menu_search).getActionView(); 

     // Capture Text in EditText 
     editsearch.addTextChangedListener(textWatcher); 

     // Show the search menu item in menu.xml 
     MenuItem menuSearch = menu.findItem(R.id.menu_search); 

     menuSearch.setOnActionExpandListener(new OnActionExpandListener() { 

      // Menu Action Collapse 
         @Override 
         public boolean onMenuItemActionCollapse(MenuItem item) { 
          // Empty EditText to remove text filtering 
          editsearch.setText(""); 
          editsearch.clearFocus(); 
          return true; 
         } 

         // Menu Action Expand 
         @Override 
         public boolean onMenuItemActionExpand(MenuItem item) { 
          // Focus on EditText 
          editsearch.requestFocus(); 

          // Force the keyboard to show on EditText focus 
          InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
          imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 
          return true; 
         } 
     }); 




     return super.onCreateOptionsMenu(menu); 
    } 


     private TextWatcher textWatcher = new TextWatcher() { 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onTextChanged(CharSequence arg0, int arg1, int arg2, 
        int arg3) { 
       // TODO Auto-generated method stub 

       String text = editsearch.getText().toString(); 

       modellist.clear(); 
       if (text.length() == 0) { 
        CustomAdapter.modellist.addAll(CustomAdapter.arraylist); 
       } 
       else 
       { 
        for (MyModel wp : CustomAdapter.arraylist) 
        { 
         if (wp.getName().toLowerCase(Locale.getDefault()).contains(text)) 
         { 
          CustomAdapter.modellist.add(wp); 
         } 
        } 
       } 
       MainActivity.this.adapter.notifyDataSetChanged(); 
      } 

     }; 

} 

CustomAdapter.java

package com.example.filterlistview; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.Locale; 

import android.app.Activity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

public class CustomAdapter extends BaseAdapter{ 

    ArrayList<String> name,comp,mobile,addr,pin; 
    Activity context; 
    static List<MyModel> modellist; 
    static ArrayList<MyModel> arraylist; 

    public CustomAdapter(Activity context,List<MyModel> modellist) { 
     super(); 
     this.context = context; 
     this.modellist = modellist; 
     this.arraylist = new ArrayList<MyModel>(); 
     this.arraylist.addAll(modellist); 
    } 

    private class ViewHolder { 
     TextView Name; 
     TextView Company; 
     TextView Mobile; 
     TextView Address; 
     TextView Pincode; 
    } 

    public int getCount() { 
     return modellist.size(); 
    } 

    public Object getItem(int position) { 
     return modellist.get(position); 
    } 

    public long getItemId(int position) { 
     return 0; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     final ViewHolder holder; 

     LayoutInflater inflater = context.getLayoutInflater(); 

     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.list_row, null); 
      holder = new ViewHolder(); 

      holder.Name = (TextView) convertView.findViewById(R.id.name); 
      holder.Company = (TextView) convertView.findViewById(R.id.company); 
      holder.Mobile = (TextView) convertView.findViewById(R.id.Mobile); 
      holder.Address = (TextView) convertView.findViewById(R.id.Address); 
      holder.Pincode = (TextView) convertView.findViewById(R.id.pincode); 

      convertView.setTag(holder); 


     } else { 

      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.Name.setText(modellist.get(position).getName()); 
     holder.Company.setText(modellist.get(position).getCom()); 
     holder.Mobile.setText(modellist.get(position).getMob()); 
//  holder.Address.setText(addr.get(position)); 
//  holder.Pincode.setText(pin.get(position)); 

     return convertView; 

    } 


    public void filter(String charText) { 
     charText = charText.toLowerCase(Locale.getDefault()); 
//  modellist.clear(); 
     if (charText.length() == 0) { 
      modellist.addAll(arraylist); 
     } 
     else 
     { 
      for (MyModel wp : arraylist) 
      { 
       if (wp.getName().toLowerCase(Locale.getDefault()).contains(charText)) 
       { 
        modellist.add(wp); 
       } 
      } 
     } 
     notifyDataSetChanged(); 
    } 

} 

MyModel.java

package com.example.filterlistview; 

public class MyModel { 

    private String name; 
    private String com; 
    private String mob; 

    public MyModel(String name, String com,String mob) 
    { 
     this.name = name; 
     this.com = com; 
     this.mob = mob; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public String getMob() { 
     return this.mob; 
    } 

    public String getCom() { 
     return this.com; 
    } 
} 

错误:

05-14 15:30:02.123: E/AndroidRuntime(21775): FATAL EXCEPTION: main 
05-14 15:30:02.123: E/AndroidRuntime(21775): java.lang.NullPointerException 
05-14 15:30:02.123: E/AndroidRuntime(21775): at com.example.filterlistview.MainActivity$1.onTextChanged(MainActivity.java:194) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at android.widget.TextView.sendOnTextChanged(TextView.java:7671) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at android.widget.TextView.handleTextChanged(TextView.java:7718) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:8081) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at android.text.SpannableStringBuilder.sendTextChange(SpannableStringBuilder.java:892) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:352) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:266) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:443) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:420) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:29) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:663) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:425) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:333) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at android.os.Looper.loop(Looper.java:154) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at android.app.ActivityThread.main(ActivityThread.java:4624) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at java.lang.reflect.Method.invokeNative(Native Method) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at java.lang.reflect.Method.invoke(Method.java:511) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576) 
05-14 15:30:02.123: E/AndroidRuntime(21775): at dalvik.system.NativeStart.main(Native Method) 
+0

后,你越来越'NPE'的行号。 –

+0

MainActivity.this.adapter.notifyDataSetChanged();这是MainActivity中的行 – Giridharan

+0

然后可能适配器为空。好像你应该添加ArrayAdapter 广告= CustomAdapter(MainActivity.this, \t \t \t \t \t \t CustomAdapter.modellist);然后说MainActivity.this.adapter.notifyDataSetChanged(); – Aniruddha

回答

2

adapter是空的,因为你不初始化,您有以下代码:

CustomAdapter adapter= new CustomAdapter(MainActivity.this, a_list); 
adapter.notifyDataSetChanged(); 

在上面的代码中,你在本地创建adapter但你尝试调用适配器你在onTextChanged的顶部宣布:

CustomAdapter adapter; 

因此改变:

CustomAdapter adapter= new CustomAdapter(MainActivity.this, a_list); 

adapter= new CustomAdapter(MainActivity.this, a_list); 
+1

Yep.I同意这个答案了。 –

0

然后可能适配器为空。好像你应该添加后线下方for循环

CustomAdapter<MyModel> adapter = new CustomAdapter(MainActivity.this, CustomAdapter.modellist); 

,然后说

MainActivity.this.adapter.notifyDataSetChanged();

相关问题