0

文字列配列を検索し、結果を ListView に取得したいと考えています。

だから、もし私が持っているなら

<string-array name="Colors">
    <item>Red</item>
    <item>Yellow</item>
    <item>Blue</item>
    <item>DarkRed</item>
</string>

「赤」を検索すると、ListView の 2 つの項目に入る必要があります。項目ごとに、文字列配列への ID と、ListView に表示される文字列値を知りたいと思います。

結果を検索している間、すべてが終了すると消える ProgressBar (不確定なステータス) を表示したいと思います。

最初のステップは、文字列配列を List または String[] に取得してから、配列の各項目を比較する新しい Thread を作成し、検索テキストに一致するものを ListView に配置することです。

どの方法が最善かはわかりません。私のコードは次のようなものです:

public class SearchActivity extends Activity {
    private ProgressBar mProgress;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search);

        mProgress = (ProgressBar) findViewById(R.id.Progress);

        new Thread(new Runnable() {
            public void run() {
            int item_pos = 0;
            int item_count = 0;

            String[] Colors = getResources().getStringArray(R.array.Colors); 
                item_count = Colors.length();

                mProgress.setVisibility(View.VISIBLE);

                while (item_pos < item_count) {
                    // Compare with the search text
                    // Add it to the ListView (I don't know how)
                    item_pos +=1;
                }
                mProgress.setVisibility(View.GONE);
            }
        }).start();
    }
}

だから、私の質問:

  1. アイテム ID と文字列の両方を取得し、各テキスト値を検索テキストと比較するにはどうすればよいですか?
  2. ListView に項目を追加するにはどうすればよいですか?
  3. ProgressBar が表示されないのはなぜですか? ProgressBar XML コードは次のとおりです。

    <ProgressBar
        android:id="@+id/Progress"
        style="@android:style/Widget.ProgressBar.Small"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:indeterminate="true"
        android:visibility="visible" />
    

あなたのすべての提案と助けに感謝します!

4

1 に答える 1

3

これが私がこの問題に取り組む方法です。

まず、私はstring-arrayこのようになります:

    Resources res = getResources();
    String[] colors = res.getStringArray(R.array.Colors);
    // transform into ArrayList for ease of use
    ArrayList<String> colorsList = Arrays.asList(colors); 

リストで目的のシーケンスを検索し、不要な要素を削除します。

for (String s : colorsList) {  
   if (!s.contains("red")) { // hardcoded, only to illustrate my logic
      colorsList.remove(s);
   }
}  

不要な要素のないリストができたので、それをにバインドするだけです。ListViewそのために、をお勧めしArrayAdapterます。ドキュメントには、基本的なListViewの使用法に関する優れた記事が含まれています。

Activity唯一の要素としてListViewのみを含める場合は、のListActivity代わりにからアクティビティを拡張できますActivitygetListView()ListViewを簡単に取得するために呼び出すだけのような、いくつかの新しい利点が得られます。

ProgressBarに関する限り、AsyncTaskクラスを調べることをお勧めします。これにより、アプリケーションでスレッドを処理するためのよりエレガントな方法が提供されます。Android Dev Teamは、現在使用している従来のアプローチよりもAsyncTaskを使用することをお勧めしますRunnable

最後に、ListViews全般に関するコードスニペットをさらに探している場合は、ここを実際に見てください。Androidチームの例が満載です。Androidを起動して、ListViewsに頭を悩ませることができなかったとき、それは私にとって本当に役に立ちました。

この助けを願っています!

于 2012-04-23T19:22:18.607 に答える