5

为了从列表视图中查找关键项目,我没有在适配器中使用过滤器,但现在通过点击此链接添加了过滤器,但在这一行中String playerName=songsList.get(i).get("title").toString();我收到了错误

 The method get(String) is undefined for the type String

并且也searchResults.add(songsList.get(i));作为

The method add(HashMap<String,String>) in the type ArrayList<HashMap<String,String>> is not applicable for the arguments (String)

这是我的整个代码

 public class Home extends ListActivity {

//how many to load on reaching the bottom
    int itemsPerPage = 15;
    boolean loadingMore = false;                        

    //For test data :-)
    Calendar d = Calendar.getInstance();

ArrayList<String> songsList;
ListView list;
    LazyAdapter adapter;
JSONArray posts;



 //ArrayList thats going to hold the search results
  ArrayList<HashMap<String, String>> searchResults;
  LayoutInflater inflater;
// All static variables
 static final String URL = "http://india.abc.net/ads/?json=get_recent_posts";


 static final String KEY_POSTS = "posts";
 static final String KEY_ID = "id";
static final String KEY_TITLE = "title";
static final String KEY_DATE = "date";
static final String KEY_CONTENT = "content";
static final String KEY_AUTHOR = "author";
static final String KEY_NAME = "name";
static final String KEY_ATTACHMENTS = "attachments";
static final String KEY_SLUG = "slug";
static final String KEY_THUMB_URL = "thumbnail";
static final String KEY_IMAGES = "images";
static final String KEY_URL = "url";



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

    final EditText searchBox=(EditText) findViewById(R.id.search);
    final ListView  list=(ListView)findViewById(android.R.id.list);

    //get the LayoutInflater for inflating the customomView
     //this will be used in the custom adapter
     inflater=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);





    final  ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();


        // Creating JSON Parser instance
                final JSONParser jParser = new JSONParser();

                // getting JSON string from URL
                JSONObject json = jParser.getJSONFromUrl(URL);
                try {
                     posts = json.getJSONArray(KEY_POSTS);

        // looping through all song nodes <song>
                for(int i = 0; i < posts.length(); i++){
                    JSONObject c = posts.getJSONObject(i);
                    // Storing each json item in variable
                    String id = c.getString(KEY_ID);
                    String title = c.getString(KEY_TITLE);
                    String date = c.getString(KEY_DATE);
                    String content = c.getString(KEY_CONTENT);
                    // to remove all <P> </p> and <br /> and replace with ""
                     content = content.replace("<br />", "");
                     content = content.replace("<p>", "");
                     content = content.replace("</p>", "");

                    //authornumber is agin  JSON Object
                    JSONObject author = c.getJSONObject(KEY_AUTHOR);
                    String name = author.getString(KEY_NAME);

                    String url = null;
                    String slug = null;
                    try {
                    JSONArray atta = c.getJSONArray("attachments");
                    for(int j = 0; j < atta.length(); j++){
                        JSONObject d = atta.getJSONObject(j);

                        slug = d.getString(KEY_SLUG);

                        JSONObject images = d.getJSONObject(KEY_IMAGES);

                        JSONObject thumbnail =    images.getJSONObject(KEY_THUMB_URL);
                        url = thumbnail.getString(KEY_URL);

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

                    }




            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();

            // adding each child node to HashMap key => value
            map.put(KEY_ID, id);
            map.put(KEY_TITLE, title);
            map.put(KEY_DATE, date);
            map.put(KEY_NAME, name);
            map.put(KEY_CONTENT, content);
            map.put(KEY_SLUG, slug);
            map.put(KEY_URL, url);


            // adding HashList to ArrayList
            songsList.add(map);
                }   
                }catch (JSONException e) {
                    e.printStackTrace();

                    }


              //searchResults=OriginalValues initially
                searchResults=new ArrayList<HashMap<String, String>>(songsList);


         // Getting adapter by passing json data ArrayList
            adapter=new LazyAdapter(this, songsList);    
             list.setAdapter(adapter);

             searchBox.addTextChangedListener(new TextWatcher() {

                 public void onTextChanged(CharSequence s, int start, int before, int count) {
                     adapter.getFilter().filter(s.toString());
                 }

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

                   }

                   public void afterTextChanged(Editable s) {

                   }
                  });


    // Launching new screen on Selecting Single ListItem
    list.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            HashMap<String, String> map = songsList.get(position);

            Intent in = new Intent(Home.this, Singlemenuitem.class);
            in.putExtra(KEY_TITLE, map.get(KEY_TITLE));
            in.putExtra(KEY_DATE, map.get(KEY_DATE));                         
            in.putExtra(KEY_NAME, map.get(KEY_NAME));
            in.putExtra(KEY_CONTENT, map.get(KEY_CONTENT));
            in.putExtra(KEY_URL, map.get(KEY_URL));

            startActivity(in);
        }                
    });  

适配器类是

      public class LazyAdapter extends BaseAdapter implements Filterable{
      TextView title;
      private Activity activity;
         // private TextWatcher textWatcher;
        private ArrayList<HashMap<String, String>> data;
        private static LayoutInflater inflater=null;
       public ImageLoader imageLoader; 
       final EditText searchBox=(EditText) findViewById(R.id.search);
       ArrayList<HashMap<String, String>> searchResults;
       ArrayList<String> songsList;


   public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
    activity = a;
    data=d;
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    imageLoader=new ImageLoader(activity.getApplicationContext());
}


private EditText findViewById(int search) {
    // TODO Auto-generated method stub
    return null;
}


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

public Object getItem(int position) {
    return position;
}

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

public View getView(int position, View convertView, ViewGroup parent) {
    View vi=convertView;
    if(convertView==null)
        vi = inflater.inflate(R.layout.activity_home, null);

    TextView title = (TextView)vi.findViewById(R.id.title); // title
    TextView date = (TextView)vi.findViewById(R.id.date); // artist name
    TextView content = (TextView)vi.findViewById(R.id.content);  // duration
    TextView name = (TextView)vi.findViewById(R.id.name); 
    // duration
    ImageView thumb_image=(ImageView)vi.findViewById(R.id.list_image); // thumb image

    HashMap<String, String> song = new HashMap<String, String>();
    song = data.get(position);



    // Setting all values in listview
   title.setText(song.get(Home.KEY_TITLE));
    date.setText(song.get(Home.KEY_DATE));
    content.setText(song.get(Home.KEY_CONTENT));
    name.setText(song.get(Home.KEY_NAME));

   imageLoader.DisplayImage(song.get(Home.KEY_URL), thumb_image);
    return vi;
}


public void add(String string) {
    // TODO Auto-generated method stub

}


@Override

public Filter getFilter() {
    Filter filter = new Filter() {
        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence data,FilterResults searchResults) {

            songsList = (ArrayList<String>) searchResults.values; // has the filtered values
            notifyDataSetChanged();  // notifies the data with new filtered values
        }

        @Override
        protected FilterResults performFiltering(CharSequence playerName) {
            // TODO Auto-generated method stub
            return null;
        }
    };
    String searchString=searchBox.getText().toString();
    int textLength=searchString.length();

           //clear the initial data set
    searchResults.clear();

    for(int i=0;i<songsList.size();i++)
    {
   String playerName=songsList.get(i).get("title").toString();

   if(textLength<=playerName.length()){

   //compare the String in EditText with Names in the ArrayList
     if(searchString.equalsIgnoreCase(playerName.substring(0,textLength)))

     searchResults.add(songsList.get(i));
   }
    }
    return filter;


}
}
4

2 回答 2

1
ArrayList<String> songsList;

所以songsList 是一个字符串的ArrayList...如果你做songsList.get(i) 你会有一个字符串。String 对象没有“get”方法,所以你不能更进一步

songsList.get(i).get("title").toString().

同样的事情发生在这里:

searchResults=new ArrayList<HashMap<String, String>>

所以如果你调用 searchResults.add 你必须传递一个哈希图,而不是一个字符串。

请再次检查您的类型定义,它将起作用。

于 2013-02-13T10:48:30.190 回答
0

songList 是一个字符串列表,因此您不能对其项目执行 get()

于 2013-02-13T10:58:09.200 回答