問(wèn)題描述
我有一項(xiàng)活動(dòng),它從包含許多國(guó)家/地區(qū)的信息(名稱(chēng)、首都、人口、國(guó)旗圖像)的數(shù)據(jù)庫(kù)中檢索數(shù)據(jù).主布局有一個(gè)以大寫(xiě)名稱(chēng)作為輸入的 EditText 和一個(gè) ListView.啟動(dòng)活動(dòng)時(shí),將檢索所有國(guó)家/地區(qū)并在 ListView 中簡(jiǎn)要顯示.然后在鍵入 EditText 時(shí),我希望 ListView 顯示具有匹配首都名稱(chēng)的國(guó)家/地區(qū).但我看到的是一個(gè)空白的 ListView.此外,如果 EditText 為空,我希望 ListView 顯示開(kāi)頭顯示的所有國(guó)家/地區(qū).
I have an activity that retrieves data from a database that contains information (name, capital, population, flag image) for many countries. The main layout has an EditText to take the capital name as the input and a ListView. On launching the activity, all the countries are retrieved and shown briefly in the ListView. Then on typing in the EditText I want the ListView to show the countries with the matching capital name. But what I see is a blank ListView. Besides if the EditText is empty, I want the ListView to show all the countries as it showed in the beginning.
主要布局文件如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/parentLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:orientation="vertical" >
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
ads:adSize="SMART_BANNER"
ads:adUnitId="@string/banner_ad_id"
android:visibility="gone" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/adView"
android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp" >
<EditText
android:id="@+id/search_input_capital"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:layout_alignParentTop="true"
android:visibility="visible" >
<requestFocus />
</EditText>
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="#00000000"
android:divider="@android:color/transparent"
android:drawSelectorOnTop="false"
android:layout_below="@id/search_input_capital">
</ListView>
</RelativeLayout>
</RelativeLayout>
活動(dòng)的代碼(CapitalActivity.java)是:
And the code for the activity ( CapitalActivity.java ) is:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_capital);
private ArrayList<Country> items;
private ArrayList<Country> items_all;
private ArrayList<Country> items_new;
private EfficientAdapter adapter;
private ListView listView;
EditText searchInput=(EditText)findViewById(R.id.search_input_capital);
items = new ArrayList<Country>();
items_new = new ArrayList<Country>();
listView = (ListView) findViewById(R.id.listView);
listView.setDividerHeight(10);
adapter = new EfficientAdapter(CapitalActivity.this);
listView.setAdapter(adapter);
setListItems("");
searchInput.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
String searchCapital = new String(s.toString()).trim();
items_new.clear();
for(Country myCountry : items_all) {
if( myCountry.getCapital() != null &&
myCountry.getCapital().trim().toLowerCase().contains(searchCapital)) {
items_new.add(myCountry);
}
}
items.clear();
items = (ArrayList<Country>) items_new.clone();
if(searchCapital.trim().isEmpty()){
items = items_all;
}
adapter.notifyDataSetChanged();
}
});
private void setListItems(String searchKey) {
items_all= DatabaseAccessor.getCountryList(CapitalActivity.this, type, typeValue, searchKey);
items=items_all;
adapter.notifyDataSetChanged();
}
上面只顯示了必要的代碼段.我應(yīng)該怎么做才能達(dá)到目標(biāo)?
Only the necessary code segment has been shown above. What should I do to achieve the target ?
我在上面粘貼的代碼中大部分省略了 EfficientAdapter
實(shí)現(xiàn)部分.但是這次我也粘貼了該代碼:
I mostly omitted the EfficientAdapter
implementation part in the code pasted above. However I am pasting that code too this time :
public class EfficientAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private Context context;
public EfficientAdapter(Context context) {
mInflater = LayoutInflater.from(context);
this.context = context;
}
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.country_container, null);
holder = new ViewHolder();
holder.nameView = (TextView) convertView.findViewById(R.id.nameView);
holder.continentView = (TextView) convertView.findViewById(R.id.continentView);
holder.imageView = (ImageView) convertView.findViewById(R.id.imageView);
holder.detailsView = (TextView) convertView.findViewById(R.id.detailsView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
OnClickListener ocl = new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(CapitalActivity.this, CountryLearningActivity.class);
intent.putExtra(Constants.KEY_COUNTRY, items);
intent.putExtra(Constants.KEY_INDEX, position);
startActivity(intent);
}
};
Country item = items.get(position);
holder.nameView.setText(item.getCountry());
if (type.equalsIgnoreCase(filters[0]) || type.equalsIgnoreCase(filters[1])
|| type.equalsIgnoreCase(filters[2])) {
holder.continentView.setText(item.getContinent());
} else if (type.equalsIgnoreCase(filters[3])) {
holder.continentView.setText(Html
.fromHtml("Area: " + formatter.format(Double.parseDouble(item.getArea())) + " km<sup>2</sup>"));
} else if (type.equalsIgnoreCase(filters[4])) {
holder.continentView.setText("Population : " + item.getPopulation());
}
holder.imageView.setImageResource(Utils.getResID(CapitalActivity.this, item.getFlag()));
holder.detailsView.setOnClickListener(ocl);
convertView.setOnClickListener(ocl);
return convertView;
}
class ViewHolder {
TextView nameView;
ImageView imageView;
TextView continentView;
TextView detailsView;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
}
推薦答案
只需從當(dāng)前頁(yè)面打開(kāi)同一頁(yè)面即可獲取以下代碼
just open teh same page from your current page for the below code
enter cod protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_capital);
private ArrayList<Country> items;
private ArrayList<Country> items_all;
private ArrayList<Country> items_new;
private EfficientAdapter adapter;
private ListView listView;
EditText searchInput=(EditText)findViewById(R.id.search_input_capital);
items = new ArrayList<Country>();
items_new = new ArrayList<Country>();
listView = (ListView) findViewById(R.id.listView);
listView.setDividerHeight(10);
adapter = new EfficientAdapter(CapitalActivity.this);
listView.setAdapter(adapter);
setListItems("");
searchInput.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
String searchCapital = new String(s.toString()).trim();
items_new.clear();
for(Country myCountry : items_all) {
if( myCountry.getCapital() != null &&
myCountry.getCapital().trim().toLowerCase().contains(searchCapital)) {
items_new.add(myCountry);
}
}
items.clear();
items = (ArrayList<Country>) items_new.clone();
if(searchCapital.trim().isEmpty()){
items = items_all;
}
adapter.notifyDataSetChanged();
}
});
private void setListItems(String searchKey) {
private void setListItems(String searchKey) {
items_all= DatabaseAccessor.getCountryList(CapitalActivity.this, type, typeValue, searchKey);
items=items_all;
adapter.notifyDataSetChanged();
}這里
這篇關(guān)于android - 在更改 EditText 值時(shí)無(wú)法更新列表視圖的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!