Как я могу поместить onclicklistner в указанную строку, которую пользователь искал в searchView. ive пытался выяснить, как это сделать, но когда я делаю это, он всегда показывает тост первой строки или ссылку Uri. Может кто-нибудь мне помочь??OnClickListener в элементе Listview Filter
как, например, когда я ищу ABC, я хочу щелкнуть по нему, чтобы увидеть тост или ссылку Uri, когда я нажму на нее.
Employee.java
public class Employee {
private String name;
private int age;
public Employee(String name,int age){
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}}
EmployeeAdapter.java
public class EmployeeAdapter extends BaseAdapter implements Filterable {
public Context context;
public ArrayList<Employee> employeeArrayList;
public ArrayList<Employee> orig;
public EmployeeAdapter(Context context, ArrayList<Employee> employeeArrayList) {
super();
this.context = context;
this.employeeArrayList = employeeArrayList;
}
public class EmployeeHolder
{
TextView name;
TextView age;
}
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
final FilterResults oReturn = new FilterResults();
final ArrayList<Employee> results = new ArrayList<Employee>();
if (orig == null)
orig = employeeArrayList;
if (constraint != null) {
if (orig != null && orig.size() > 0) {
for (final Employee g : orig) {
if (g.getName().toLowerCase()
.contains(constraint.toString()))
results.add(g);
}
}
oReturn.values = results;
}
return oReturn;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
employeeArrayList = (ArrayList<Employee>) results.values;
notifyDataSetChanged();
}
};
}
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
@Override
public int getCount() {
return employeeArrayList.size();
}
@Override
public Object getItem(int position) {
return employeeArrayList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
EmployeeHolder holder;
if(convertView==null)
{
convertView=LayoutInflater.from(context).inflate(R.layout.row, parent, false);
holder=new EmployeeHolder();
holder.name=(TextView) convertView.findViewById(R.id.txtName);
holder.age=(TextView) convertView.findViewById(R.id.txtAge);
convertView.setTag(holder);
}
else
{
holder=(EmployeeHolder) convertView.getTag();
}
holder.name.setText(employeeArrayList.get(position).getName());
holder.age.setText(String.valueOf(employeeArrayList.get(position).getAge()));
return convertView;
}}
MainActivity.java
public class MainActivity extends Activity implements SearchView.OnQueryTextListener{
private SearchView mSearchView;
private ListView mListView;
private ArrayList<Employee> employeeArrayList;
private EmployeeAdapter employeeAdapter;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSearchView=(SearchView) findViewById(R.id.searchView1);
mListView=(ListView) findViewById(R.id.listView1);
employeeArrayList=new ArrayList<Employee>();
employeeArrayList.add(new Employee("ABC", 24));
employeeArrayList.add(new Employee("ACB", 24));
employeeArrayList.add(new Employee("BVF", 28));
employeeArrayList.add(new Employee("BRT", 28));
employeeArrayList.add(new Employee("ANM", 23));
employeeAdapter=new EmployeeAdapter(MainActivity.this, employeeArrayList);
mListView.setAdapter(employeeAdapter);
mListView.setTextFilterEnabled(true);
setupSearchView();
registerClickCallback();
}
private void registerClickCallback() {
ListView list = (ListView) findViewById(R.id.listView1);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Employee pick = employeeArrayList.get(position);
String message = "You Selected " + pick.getName();
Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
}
});
}
private void setupSearchView()
{
mSearchView.setIconifiedByDefault(false);
mSearchView.setOnQueryTextListener(this);
mSearchView.setSubmitButtonEnabled(true);
mSearchView.setQueryHint("Search Here");
}
@Override
public boolean onQueryTextChange(String newText)
{
if (TextUtils.isEmpty(newText)) {
mListView.clearTextFilter();
} else {
mListView.setFilterText(newText);
}
return false;
}
@Override
public boolean onQueryTextSubmit(String query)
{
return false;
}}
Спасибо заранее!
Что вы подразумеваете под 'в указанной строке, которую пользователь искал в searchView'? вам не нужен элемент clickListener для всех строк? – Rami
Я хочу, чтобы на всех строках был элемент clickListener. его просто, когда я что-то ищу в поиске. и используйте clickListener, он всегда показывает первый кликлайнер строк, а не тот, который я искал. –
Опубликуйте свой код (где вы реализуете clickListener). – Rami