如何将TextWatcher添加到android中的活动中

如何将TextWatcher添加到android中的活动中,android,android-listview,android-activity,textwatcher,Android,Android Listview,Android Activity,Textwatcher,我对android非常陌生,并尝试学习各种技术,包括使用编辑文本选项的搜索栏。 我目前正在使用JSON解析Twitter,并将其存储在列表活动中。 此外,还实现了使用EditText选项的搜索栏,这样当用户输入任何内容时,都会收到一个新的arraylist。但不知何故,它需要与TextWatcher和ListActivity集成 收到的实际错误:创建TextWatcher的构造函数。 TwitterFeedAdapter具有作为公共TwitterFeedAdapter的构造函数(活动a,int

我对android非常陌生,并尝试学习各种技术,包括使用编辑文本选项的搜索栏。 我目前正在使用JSON解析Twitter,并将其存储在列表活动中。 此外,还实现了使用EditText选项的搜索栏,这样当用户输入任何内容时,都会收到一个新的arraylist。但不知何故,它需要与TextWatcher和ListActivity集成

收到的实际错误:创建TextWatcher的构造函数。 TwitterFeedAdapter具有作为公共TwitterFeedAdapter的构造函数(活动a,int textViewResourceId,ArrayList tweets),但当我返回搜索值时,我使用TwitterFeedAdapter作为ArrayList,但它需要实现TextWatcher

有什么想法可以让我恢复我现在的状态,或者有什么更好的帮助吗

/**TwitterFeedActivity**/

public class TwitterFeedActivity extends Activity implements TextWatcher{

public Bitmap placeholder;

private EditText et;
private ListView listView;

private ArrayList<Tweet> tweets;
private ArrayList<Tweet> array_sort= new ArrayList<Tweet>();
int textLength = 0;

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

    tweets = getTweets("android", 1);

    listView = (ListView) findViewById(R.id.ListViewId);
    et = (EditText)findViewById(R.id.EditText01);

    listView.setAdapter(new TwitterFeedAdapter(this, R.layout.list_item, tweets));  

    et.addTextChangedListener(new TextWatcher()
    {

        @Override
        public void afterTextChanged(Editable arg0) {
            // 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
            textLength = et.getText().length();
            array_sort.clear();

            for (int i = 0; i < tweets.size(); i++)
            {
                if (textLength <= tweets.size())
                {
                    if(et.getText().toString().equalsIgnoreCase((String)((CharSequence) tweets.get(i)).subSequence(0,textLength)))
                        {
                         array_sort.add(tweets.get(i));
                         }
                    }
              }
                            /***** Error is here since TwitterFeedAdapter has Activity implemented for it *******/
            listView.setAdapter(new TwitterFeedAdapter(this, R.layout.list_item array_sort));
            }
        });

}

public ArrayList<Tweet> getTweets(String searchTerm, int page) {
    String searchUrl = "http://search.twitter.com/search.json?q=@" 
                        + searchTerm + "&rpp=100&page=" + page;

    ArrayList<Tweet> tweets = new ArrayList<Tweet>();

    HttpClient client = new  DefaultHttpClient();
    HttpGet get = new HttpGet(searchUrl);

    ResponseHandler<String> responseHandler = new BasicResponseHandler();

    String responseBody = null;
    try{
        responseBody = client.execute(get, responseHandler);

    }catch(Exception ex) {
        ex.printStackTrace();
    }

    JSONObject jsonObject = null;
    JSONParser parser=new JSONParser();

    try {
        Object obj = parser.parse(responseBody);
        jsonObject=(JSONObject)obj;

    }catch(Exception ex){
        Log.v("TEST","Exception: " + ex.getMessage());
    }

    JSONArray arr = null;

    try {
        Object j = jsonObject.get("results");
        arr = (JSONArray)j;
        System.out.println(arr + "Array");
    }catch(Exception ex){
        Log.v("TEST","Exception: " + ex.getMessage());
    }

    for(Object t : arr) {
        Tweet tweet = new Tweet(
                ((JSONObject)t).get("from_user").toString(),
                ((JSONObject)t).get("text").toString(),
                ((JSONObject)t).get("profile_image_url").toString()
                );
        tweets.add(tweet);
    }

    return tweets;
}   

/** Classes **/

public class Tweet {
    public String username;
    public String message;
    public String image_url;
    public Boolean usernameSet = false;
    public Boolean messageSet = false;
    public Boolean imageSet = false;
    public Bitmap avatar;

    public Tweet(String username, String message, String url) {
        this.username = username;
        this.message = message;
        this.image_url = url;
    }
}
 }
public class TwitterFeedAdapter extends ArrayAdapter<Tweet> {
private ArrayList<Tweet> tweets;
private Activity activity;
public ImageManager imageManager;

public TwitterFeedAdapter(Activity a, int textViewResourceId, ArrayList<Tweet> tweets) {
    super(a, textViewResourceId, tweets);
    this.tweets = tweets;
    activity = a;

    imageManager = new ImageManager(activity.getApplicationContext());
}

public static class ViewHolder{
    public TextView username;
    public TextView message;
    public ImageView image;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    ViewHolder holder;
    if (v == null) {        
        LayoutInflater vi = 
            (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.list_item, null);
        holder = new ViewHolder();
        holder.username = (TextView) v.findViewById(R.id.username);
        holder.message = (TextView) v.findViewById(R.id.message);
        holder.image = (ImageView) v.findViewById(R.id.avatar);
        v.setTag(holder);
    }
    else
        holder=(ViewHolder)v.getTag();

    final Tweet tweet = tweets.get(position);
    if (tweet != null) {
        holder.username.setText(tweet.username);
        holder.message.setText(tweet.message);
        holder.image.setTag(tweet.image_url);
        imageManager.displayImage(tweet.image_url, activity, holder.image);
    }
    return v;
}
公共类TwitterFeedActivity扩展活动实现TextWatcher{
公共位图占位符;
私人编辑;
私有列表视图列表视图;
私人ArrayList推文;
私有ArrayList数组_sort=新ArrayList();
int textLength=0;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tweets=getTweets(“安卓”,1);
listView=(listView)findViewById(R.id.ListViewId);
et=(EditText)findViewById(R.id.EditText01);
setAdapter(新的TwitterFeedAdapter(这个,R.layout.list_项,tweets));
et.addTextChangedListener(新的TextWatcher()
{
@凌驾
public void PostTextChanged(可编辑arg0){
//TODO自动生成的方法存根
}
@凌驾
更改前的公共无效(字符序列arg0,int arg1,
整数arg2,整数arg3){
//TODO自动生成的方法存根
}
@凌驾
public void onTextChanged(字符序列arg0、int arg1、int arg2、,
int arg3){
//TODO自动生成的方法存根
textLength=et.getText().length();
数组_sort.clear();
对于(int i=0;i如果(textLength您正在设置适配器,请尝试将
更改为
TwitterFeedActivity。此
如下所示

listView.setAdapter(new TwitterFeedAdapter(TwitterFeedActivity.this, R.layout.list_item, array_sort));

编辑:另外,您的代码在
R.layout.list\u item
array\u sort
之间缺少一个逗号。我已将其添加到上面的示例中。

在设置适配器的地方,请尝试将
this
更改为
TwitterFeedActivity.this
,如下所示

listView.setAdapter(new TwitterFeedAdapter(TwitterFeedActivity.this, R.layout.list_item, array_sort));

编辑:此外,您的代码在
R.layout.list\u item
array\u sort
之间缺少逗号。我已将其添加到上面的示例中。

在尝试实现TextWatcher时遇到类似问题

只需添加

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}

将它们保留为空白并修复了我的问题。

在尝试实现TextWatcher时遇到了类似的问题

只需添加

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}

将它们保留为空并修复了我的问题。

很高兴提供帮助。问题是当您执行以下操作时…
et.addTextChangedListener(new TextWatcher(){…});
然后您将创建对事件处理程序的匿名调用。因此,
(指父级
活动
)无效,因此您必须使用
活动
类名,后跟
。这是
。是的,这是真的。但我有另一个问题。在我的代码中,我正在做ArrayList tweets=new ArrayList tweets;稍后我尝试在搜索字段中查找字符串的子序列。但它返回我CharSequence。现在的问题是它不能被删除转换到ArrayList推文,因为它是一个对象。我如何解决这个问题?我做了typecast charsequence,但失败了。抱歉,您的问题在评论中不清楚。我建议您发布一个新问题。或者有没有办法找到ArrayList的子序列,就像在数组中一样?很高兴提供帮助。问题是当您执行以下操作时…
et.addTextChangedListener(new TextWatcher(){…});
然后您正在创建对事件处理程序的匿名调用。因此,
(参考父级
活动
)无效,因此您必须使用
活动
类名,后跟
。这是
。是的,这是真的。但我有另一个问题。在我的代码中,我正在做ArrayList tweets=new ArrayList tweets;稍后我尝试在搜索字段中查找字符串的子序列。但它返回我CharSequence。现在的问题是它不能被删除转换到ArrayList推文,因为它是一个对象。我如何解决这个问题?我做了类型转换charsequence,但失败了。抱歉,您的问题在评论中不清楚。我建议您发布一个新问题。或者有没有办法找到ArrayList的子序列,就像在数组中一样?