-1

行に値が 1 つしかない場合。私は答えを得ましたが、私は複数あります。

これは、Textwatcher のものを埋める方法を決定できなかった私のメイン クラスです。"CityArray" は行を作成したクラスで、"CityXmlParse" は raw フォルダー内の "cities.xml" という XML ファイルからデータを取得するクラスです。各行には画像と名前があり、入力中に名前で行をフィルタリングしたいのですが、入力後に行全体を表示する必要があります(画像付き)。

public class TravelFinalActivity は Activity {

EditText sc;
ListView lv;
List<CityData> citylist;
CityArray adapter;

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

    sc = (EditText) findViewById(R.id.citySearch);

    CityXmlParse cityParse = new CityXmlParse();
    InputStream in = getResources().openRawResource(R.raw.cities);
    cityParse.xmlParse(in);

    citylist = cityParse.getList();        
    adapter = new CityArray(getApplicationContext(),R.layout.city_row, citylist);      
    lv = (ListView) this.findViewById(R.id.cityList);
    lv.setAdapter(adapter);      
    lv.setTextFilterEnabled(true);        

    sc.addTextChangedListener(new TextWatcher() {

        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub


        }

        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
       }
  });   

} }

そして、ここに xml 解析用のクラスがあります。

public class CityXmlParse{

private final List<CityData> list = new ArrayList<CityData>();


private String getNodeValue(NamedNodeMap map, String key) {
    String nodeValue = null;
    Node node = map.getNamedItem(key);
    if (node != null) {
        nodeValue = node.getNodeValue();
    }

  return nodeValue;
}

public List<CityData> getList(){
    return this.list;
}


public void xmlParse(InputStream in){
try {
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document doc = builder.parse(in, null);
    NodeList cityList = doc.getElementsByTagName("city");

    for(int i=0; i<cityList.getLength(); i++){

    final NamedNodeMap cityAttr = cityList.item(i).getAttributes();
    final String cityName=getNodeValue(cityAttr, "name");
    final String cityInfo=getNodeValue(cityAttr, "info");   

    CityData cityObj = new CityData(cityName, cityInfo, cityName + ".png");

    list.add(cityObj);  

    }       
}catch (Throwable T) {}

}

}

最後に、これは私の「CityArray」コンストラクターであり、行をカスタマイズするためのメソッドです。

public CityArray(Context context, int textViewResourceId, List<CityData> citylist) {
    super(context, textViewResourceId, citylist);
    this.citylist=citylist;
    this.context=context;
}

public View getView(int position, View convertView, ViewGroup parent) {
    View rowView = convertView;
    if(rowView == null){
        inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        rowView = inflater.inflate(R.layout.city_row, parent,false);
    } 

    CityData cityObj = getItem(position);

    cityImage = (ImageView) rowView.findViewById(R.id.city_image);      
    cityName = (TextView) rowView.findViewById(R.id.city_name);

    String imgPath = ASSETS_DIR + cityObj.resourceImg;      
    try {
        Bitmap bitmap = BitmapFactory.decodeStream(this.context.getResources().getAssets().open(imgPath));
        cityImage.setImageBitmap(bitmap);
    } catch (IOException e) {
        e.printStackTrace();
    }

    cityName.setText(cityObj.name);     

    return rowView;
}

前もって感謝します!

4

1 に答える 1

2
  • フィルター可能なアイテムの作成ArrayAdapter: ArrayAdapterが組み込まれています。各オブジェクトArrayFilterの文字列を使用して、アダプター リスト内のオブジェクトを比較します。toString().toLowerCase()クラスでオーバーライドtoString()して CityData都市名を返すと、ArrayAdapterアイテムを効果的にフィルタリングできるはずです。

  • で自動テキスト フィルタを有効にしListViewます。レイアウトでListView使用するか、 を使用してコードから設定します。にフォーカスがあるときはいつでも、ユーザーはキーボードを起動して入力を開始するだけで、リスト アイテムが自動的にフィルター処理されます。android:textFilterEnabled="true"setTextFilterEnabled(true)listView

  • にテキスト フィルタを明示的に設定ListView:setFilterText()のメソッドを使用しListViewます。後でこれをクリアすることを忘れないでください。

関連するAndroid Sourcesを調べることで、詳細を明らかにすることができます。

于 2012-09-04T17:33:48.617 に答える