如何将TextWatcher添加到android中的活动中
我对android非常陌生,并尝试学习各种技术,包括使用编辑文本选项的搜索栏。 我目前正在使用JSON解析Twitter,并将其存储在列表活动中。 此外,还实现了使用EditText选项的搜索栏,这样当用户输入任何内容时,都会收到一个新的arraylist。但不知何故,它需要与TextWatcher和ListActivity集成 收到的实际错误:创建TextWatcher的构造函数。 TwitterFeedAdapter具有作为公共TwitterFeedAdapter的构造函数(活动a,int textViewResourceId,ArrayList tweets),但当我返回搜索值时,我使用TwitterFeedAdapter作为ArrayList,但它需要实现TextWatcher 有什么想法可以让我恢复我现在的状态,或者有什么更好的帮助吗 /**TwitterFeedActivity**/如何将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
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的子序列,就像在数组中一样?