0

目前我正在研究当在edittext中给定项目的关键字时如何从列表视图中查找项目,列表视图变为空并且输出显示在吐司消息中,任何人都可以帮助像如何制作找到的“项目”到在listivew中显示它?

public class Home extends ListActivity {

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

ArrayList<String> songsList; 
ListView list;
LazyAdapter adapter, adapter1;
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://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";
private static final String DEBUGTAG = null;
protected static final String TAG = null;

@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) {
                     //get the text in the EditText
                     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)))

                                 Toast.makeText(getApplicationContext(), playerName, 1).show();
                             Home.this.adapter.getFilter();
                             searchResults.add(songsList.get(i));

                            Log.d(TAG, "title");
                         }
                     }

                     adapter.notifyDataSetChanged();
                     list.setAdapter(new ArrayAdapter<String>
                     (Home.this,
                     R.layout.activity_home));
                 }

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


                 }

                 public void afterTextChanged(Editable s) {
                     Home.this.adapter.getFilter();

                 }
             });
4

2 回答 2

0
adapter.notifyDataSetChanged();
list.setAdapter(new ArrayAdapter<String>(Home.this, R.layout.activity_home));

您没有提供任何数据集来填充ListView.

就像您最初使用歌曲列表数据填充 ListView

adapter = new LazyAdapter(this, songsList);
list.setAdapter(adapter);

利用:

adapter = new LazyAdapter(this, searchResults);
list.setAdapter(adapter);
于 2013-02-19T06:47:42.880 回答
0

try this, edittext code for search

etSearch.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // Call back the Adapter with current character to Filter
        adapter1.getFilter().filter(s.toString());
    }
  ........

add arraylist to listview to display

adapter1 = new MyAdapter(MainActivity.this, mProductArrayList);
lvProducts.setAdapter(adapter1);

Adapter Class

public class MyAdapter extends BaseAdapter implements Filterable {

private ArrayList<Product> mOriginalValues; // Original Values
private ArrayList<Product> mDisplayedValues;    // Values to be displayed
LayoutInflater inflater;

public MyAdapter(Context context, ArrayList<Product> mProductArrayList) {
this.mOriginalValues = mProductArrayList;
this.mDisplayedValues = mProductArrayList;
inflater = LayoutInflater.from(context);
}
 ..........
@Override
public View getView(final int position, View convertView, ViewGroup parent) {

ViewHolder holder = null;

if (convertView == null) {

    holder = new ViewHolder();
    convertView = inflater.inflate(R.layout.row, null);
    holder.llContainer = (LinearLayout)convertView.findViewById(R.id.llContainer1);
    holder.tvName = (TextView) convertView.findViewById(R.id.tvName);
    holder.tvPrice = (TextView) convertView.findViewById(R.id.tvPrice);
    convertView.setTag(holder);
} else {
    holder = (ViewHolder) convertView.getTag();
}
holder.tvName.setText(mDisplayedValues.get(position).name);
holder.tvPrice.setText(mDisplayedValues.get(position).price+"");

holder.llContainer.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {

        Toast.makeText(MainActivity.this, mDisplayedValues.get(position).price.toString() , Toast.LENGTH_SHORT).show();
    }
});

return convertView;

}

于 2013-02-19T06:59:10.633 回答