馬上加入Android 台灣中文網,立即免費下載應用遊戲。
您需要 登錄 才可以下載或查看,沒有帳號?註冊
x
各位大大好~想請問Filter過濾器的寫法,已經花好多天爬文找範例、改程式碼,但只要一輸入關鍵字,整個APP就會跳掉....
在想是不是除了過濾文字,圖片也需要過濾??
我是用ListView(圖片+文字)排列清單
另外建Adapter+Filter的class,用傳入資料的方式使用(因為有兩個以上ListView共用同個Adapter)
程式碼如下:
XML:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#004B97"
tools:context=".MainActivity2">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageButton
android:id="@+id/btn"
android:layout_width="57dp"
android:layout_height="56dp"
android:src="@drawable/back" />
<TextView
android:id="@+id/tex"
android:layout_width="wrap_content"
android:layout_height="56dp"
android:layout_weight="1"
android:background="#FFFCEC"
android:gravity="center"
android:text="@string/deepsea"
android:textSize="40sp" />
<SearchView
android:id="@+id/sv"
android:layout_width="wrap_content"
android:layout_height="56dp" />
</LinearLayout>
<ListView
android:id="@+id/lis"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity:
package com.example.demo01;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity2 extends AppCompatActivity {
public TextView tex;
public ImageButton btn;
public ListView lis;
public SearchView sv;
public List<Integer> fish_ps = new ArrayList();
public List<String> fish_ns = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
setTitle("呆丸魚仔");
fish_ps.add(R.drawable.dp1);fish_ps.add(R.drawable.dp2);fish_ps.add(R.drawable.dp3);fish_ps.add(R.drawable.dp4);
fish_ps.add(R.drawable.dp5);fish_ps.add(R.drawable.dp6);fish_ps.add(R.drawable.dp7);fish_ps.add(R.drawable.dp8);
fish_ps.add(R.drawable.dp9);fish_ps.add(R.drawable.dp10);
fish_ns.add("三鑽光魚");fish_ns.add("大西洋鑽光魚");fish_ns.add("小月燈魚");fish_ns.add("孔頭底尾鱈");
fish_ns.add("日本扁鯊");fish_ns.add("長刀光魚");fish_ns.add("臺灣扁鯊");fish_ns.add("裸頭大尾鱈");
fish_ns.add("寬咽魚");fish_ns.add("褶胸魚");
tex = findViewById(R.id.tex);
btn = findViewById(R.id.btn);
lis = findViewById(R.id.lis);
sv = findViewById(R.id.sv);
adp adp01 = new adp(fish_ps,fish_ns);
lis.setAdapter(adp01);
lis.setTextFilterEnabled(true);
sv = findViewById(R.id.sv);
sv.setQueryHint("魚仔名");
sv.setSubmitButtonEnabled(false);
sv.setIconifiedByDefault(true);
sv.requestFocusFromTouch();
tex.setTypeface(
Typeface.createFromAsset(getAssets(),"fonts/typeface01.ttf")
);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent goback = new Intent(MainActivity2.this,MainActivity.class);
startActivity(goback);
}
});
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adp01.getFilter().filter(newText);
return true;
}
});
}
}
另外建的Adapter+filter
package com.example.demo01;
import android.provider.UserDictionary;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.demo01.R;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
public class adp extends BaseAdapter implements Filterable {
List<Integer> mIcons;
List<String> mWords;
public adp(List<Integer> Icons, List<String> Words) {
mIcons.addAll(Icons);
mWords.addAll(Words);
}
@Override
public int getCount() {
return mIcons.size();
}
@Override
public Object getItem(int position) {
return mIcons.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.listlayout01, null);
}
ImageView fish_ms = convertView.findViewById(R.id.lis_img);
TextView fish_ds = convertView.findViewById(R.id.lis_tex);
fish_ms.setImageResource(mIcons.get(position));
fish_ds.setText(mWords.get(position));
return convertView;
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
ArrayList<String> filWords = new ArrayList<>();
if (constraint == null || constraint.length() == 0) {
filWords.addAll(mWords);
} else {
for (String movie: mWords) {
if (movie.toLowerCase().contains(constraint.toString().toLowerCase())) {
filWords.add(movie);
}
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = filWords;
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
mWords.clear();
mWords.addAll((Collection<? extends String>) results.values);
notifyDataSetChanged();
}
};
return filter;
}
}
煩請各位高手指點迷津QQ
|
|