2012-01-26 4 views
0

ListViewの検索に問題があります。私の活動では、リストにいくつかのデータが表示されていますが、今はそのリストの上に検索バーがあります。私は、検索バーに入力すると、リストビュー内のデータは検索結果に従って調整する必要があることを実装したかったのです。私はTextWatcherを使用しましたが、リストビューのデータを取り込むArrayListはカスタムタイプの問題です。アンドロイドでTextViewに表示されるデータを動的に検索する方法は?

これはカスタムタイプです。

public class FRNews { 

// Private Members START 
     private long id = 0; 
     private String headline = ""; 
     private String detail = ""; 
     private String submit_date = Configuration.DEFAULT_DATE; 

//Private Members END 


// Getter/Setter START 
     public void setId(long id){ 
      this.id = id ; 
     } 

     public void setHeadline(String headline){ 
      this.headline = headline ; 
     } 

     public void setDetail(String detail){ 
      this.detail = detail; 
     } 

     public void setSubmitDate(String submit_date){ 
      this.submit_date = submit_date; 
     } 

     public long getId(){ 
      return this.id ; 
     } 

     public String getHeadline(){ 
      return this.headline ; 
     } 

     public String getDetail(){ 
      return this.detail; 
     } 

     public String getSubmitDate(){ 
      return this.submit_date; 
     } 

// Getter/Setter END   

} 

これは私のクラスで、アレイアダプタを呼び出しており、TextWatcherを使用してリストビューを検索しています。

public class FRNewsList extends ListActivity { 
    public static ArrayList<FRNews> newsList = new ArrayList<FRNews>(); 
    public static ArrayList<FRNews> tempList = new ArrayList<FRNews>(); 

    private int detailId = 0; 
    private ProgressDialog progDialog; 
    private FRCustomAdapterLatestNews newsAdapter; 

    private ListView listView; 
    private EditText etSearch; 

    private TextView tvSeeAllNews; 

    private String headline; 

    int textLength = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.tab_home_main); 

     listView = (ListView) findViewById(android.R.id.list); 
     etSearch = (EditText) findViewById(R.id.et_search_news); 

     tvSeeAllNews = (TextView) findViewById(R.id.tv_news_see_all); 

     if (newsList == null) { 
      newsList = new ArrayList<FRNews>(); 
     } 
     if (tempList == null) { 
      tempList = new ArrayList<FRNews>(); 
     } 

     putNewsInView(); 

     // listView.setAdapter(new ArrayAdapter<FRNews>(this, 
     // android.R.layout.simple_list_item_1, tempList)); 

     listView.setOnItemClickListener(new OnItemClickListener() { 

      public void onItemClick(AdapterView<?> arg0, View view, 
        int position, long id) { 
       setDetailId(position); 

       int newsId = getDetailId(); 

       Intent i = new Intent(FRNewsList.this, 
         FRLatestNewsDetailActivity.class); 
       i.putExtra("id", newsId); 

       // Create the view using FirstGroup's LocalActivityManager 
       View v = FRNewsDetailActivityGroup.group 
         .getLocalActivityManager() 
         .startActivity("news_detail", 
           i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
         .getDecorView(); 

       // Again, replace the view 
       FRNewsDetailActivityGroup.group.replaceView(v); 

      } 
     }); 

     etSearch.addTextChangedListener(new TextWatcher() { 

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

       getNewsDbContent(); 
       textLength = count; 
       tempList.clear(); 
       // int a = newsList.size(); 
       if (s.length() > 0) { 
        for (int i = 0; i < newsList.size(); i++) { 
         FRNews searchNews = newsList.get(i); 
         String headlineSearch = searchNews.getHeadline(); 
         if (textLength <= headlineSearch.length()) { 
          if (etSearch 
            .getText() 
            .toString() 
            .equalsIgnoreCase(
              (String) headlineSearch 
                .subSequence(0, textLength))) { 
           tempList.add(i, searchNews); 
          } 
         } 
        } 
        listView.setAdapter(new ArrayAdapter<FRNews>(
          FRNewsList.this, 
          android.R.layout.simple_list_item_1, tempList)); 
       } else 
        listView.setAdapter(new ArrayAdapter<FRNews>(
          FRNewsList.this, 
          android.R.layout.simple_list_item_1, newsList)); 
      } 

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

      public void afterTextChanged(Editable s) { 
      } 
     }); 

     tvSeeAllNews.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       Intent i = new Intent(FRNewsList.this, FRAllNews.class); 

       // Create the view using FirstGroup's LocalActivityManager 
       View view = FRNewsDetailActivityGroup.group 
         .getLocalActivityManager() 
         .startActivity("news_all", 
           i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
         .getDecorView(); 

       // Again, replace the view 
       FRNewsDetailActivityGroup.group.replaceView(view); 
      } 
     }); 
    } 

    private void putNewsInView() { 
     // public void run() { 
     getNewsDbContent(); 
     newsAdapter = new FRCustomAdapterLatestNews(getApplicationContext(), 
       R.layout.tab_home_row, R.id.tv_news_date, tempList); 

     setListAdapter(newsAdapter); 
    } 

    private void getNewsDbContent() { 
     newsList.clear(); 
     tempList.clear(); 
     FRNewsTable getNews = new FRNewsTable(FRNewsList.this); 
     newsList = getNews.getNewsFromDB("news_id,headline,detail,submit_date"); 
     // setNewsList(newsList); 
     tempList = newsList; 
     getNews.CloseDB(); 

    } 

    public int getDetailId() { 
     return detailId; 
    } 

    public void setDetailId(int detailId) { 
     this.detailId = detailId; 
    } 

} 

デバッグ中にnewsList.size()を使用しているため、ArrayListのサイズが取得できません。 このコードを確認して、この点を助けてください。

ありがとうございます。

+0

内にコードを書いてみ**または** a **。はい、もしくは、いいえ ?? –

+0

はいこれは私がやろうとしていることですが、ArrayListには文字列ではなくオブジェクトが含まれています。 – aiRbornE

+0

私はあなたの手続きが正しい結果をもたらすかもしれないが、それがあなたの要求に対してより良い方法ではないと思う。私の答えをチェックしてください。一時的に役立つかもしれません。 –

答えて

0

**そして、リストビューが始まる文字を持つすべての国を表示するために持っているA ** A **あなたのリストビューは、すべての国の名前を持っている場合は、私の質問に答えて、ユーザがアルファベットを入力してくださいTextChangedListener

0

この要件には、AutoCompleteTextViewを使用できます。なぜListViewを使用していますか?

AutoCompleteTextViewは、この目的のためにのみ設計されています。下のリンクで利用可能なコードをチェックするだけで、AutoCompleteTextViewの使い方を知ることができます。

Example of AutoCompleteTextView

でもリンクを訪問した後、あなたは私を気軽に、理解することができません。

関連する問題