私のアプリには listView があり、それをフィルタリングしたいと考えています。
リスト ページは変数 filter.equalsIgnoreCase("") で始まるため、リストにはすべてが表示されます。!filter.equalsIgnoreCase("") の場合、リストはフィルター処理されます。
フィルタ ページはフィルタのリストで、そのうちの 1 つを選択し、ImageView の setVisibility(View.VISIBLE) を設定し、変数 filter="something" を設定します。
listViewページに戻るための「DONE」ボタンで確定します。
フィルターに戻ると、選択したフィルターのフラグを保持する必要がありますが、setVisibility(View.VISIBLE) は機能しません。
この問題は、list_row.xml で imageView の可視性を非表示に設定したことに関連していると思いますが、onCreate メソッド内のフィルター ページで i
フィルタのリストを作成するコードは次のとおりです。
private void popolaLaLista(final ListView listView1, final String table, Cursor cursor) {
ArrayList<HashMap<String, String>> agentsMulti = new ArrayList<HashMap<String, String>>();
if (cursor.moveToFirst()) {
do {
int index = cursor.getColumnIndex("risk");
String risk = cursor.getString(index);
String[] tokens = risk.split("- ");
HashMap<String, String> agentMulti = new HashMap<String, String>();
agentMulti.put("Risk", tokens[0]);
agentMulti.put("Explanation", tokens[1]);
agentsMulti.add(agentMulti);
} while (cursor.moveToNext());
}
String[] keys = { "Risk", "Explanation"};
int[] ids = {R.id.text1,R.id.text2};
SimpleAdapter adapterMulti = new SimpleAdapter(this, agentsMulti, R.layout.list_row, keys, ids);
final ListView listView= (ListView)findViewById(R.id.listView1);
listView.setAdapter(adapterMulti);
listView.setClickable(true);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View arg1, int position, long arg3) {
ImageView flag = (ImageView) arg1.findViewById(R.id.flag_id);
if(flag.getVisibility()==View.INVISIBLE){
for(int i =0; i<parent.getChildCount(); i++ ){
ImageView childFlag = (ImageView) parent.getChildAt(i).findViewById(R.id.flag_id);
childFlag.setVisibility(View.INVISIBLE);
}
flag.setVisibility(View.VISIBLE);
TextView risk = (TextView) arg1.findViewById(R.id.text1);
filter = risk.getText().toString().trim();
}else{
flag.setVisibility(View.INVISIBLE);
filter = "";
}
}
});
}
以前に選択したフィルターを確認するコードは次のとおりです。
private void setFlag(String filter2) {
ListView lista = (ListView) findViewById(R.id.listView1);
Adapter adapter = lista.getAdapter();
int adapterCount = adapter.getCount();
for (int i = 0; i < adapterCount; i++)
{
TextView tv = (TextView) adapter.getView(i, null, null).findViewById(R.id.text1);
String tvValue = tv.getText().toString().trim();
Log.i("tv " + i + ", value", tvValue);
if(tvValue.equalsIgnoreCase(filter2)){
ImageView iv = (ImageView) adapter.getView(i, null, null).findViewById(R.id.flag_id);
iv.setVisibility(View.VISIBLE);
}
}
}
これはlist_row.xmlのコードで、フィルタのlistViewの単一項目のレイアウトです。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/id_list_row"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dip" >
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/thumbnail"
android:layout_toRightOf="@+id/thumbnail"
android:text="TITOLO"
android:textColor="#040404"
android:textSize="15dp"
android:textStyle="bold" />
<TextView
android:id="@+id/text2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/text1"
android:layout_marginTop="1dp"
android:text="sottotitolo"
android:textColor="#343434"
android:paddingRight="10dp"
android:textSize="12dip" />
<ImageView
android:id="@+id/flag_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/text2"
android:visibility="invisible"
android:src="@drawable/checkmark_filter"
android:layout_centerVertical="true"/>
</RelativeLayout>