Android从适配器过滤
我是Android新手,我从Mysql创建了一个数据列表,当我过滤Listview时,它工作正常,但当我点击过滤项时,它得到了错误的对象Id,但我想要的是,当我点击过滤项时,它应该显示正确的项IdAndroid从适配器过滤,android,listview,android-adapter,Android,Listview,Android Adapter,我是Android新手,我从Mysql创建了一个数据列表,当我过滤Listview时,它工作正常,但当我点击过滤项时,它得到了错误的对象Id,但我想要的是,当我点击过滤项时,它应该显示正确的项Id ArrayList<Clients> filtered = new ArrayList<Clients>(); 代码如下: package com.example.akbari.test; import android.app.AlertDialog; import a
ArrayList<Clients> filtered = new ArrayList<Clients>();
代码如下:
package com.example.akbari.test;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import com.amigold.fundapter.BindDictionary;
import com.amigold.fundapter.FunDapter;
import com.amigold.fundapter.extractors.StringExtractor;
import com.amigold.fundapter.interfaces.FunDapterFilter;
import com.kosalgeek.android.json.JsonConverter;
import com.kosalgeek.genasync12.AsyncResponse;
import com.kosalgeek.genasync12.PostResponseAsyncTask;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
public class ClientList extends AppCompatActivity implements AsyncResponse, AdapterView.OnItemClickListener {
final String LOG = "ClientList";
ListView lv;
private ArrayList<Clients> list;
EditText inputSearch;
Global global;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_client_list);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
// .setAction("Action", null).show();
startActivity(new Intent(ClientList.this,ClientInsert.class));
}
});
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
global = ((Global) getApplicationContext());
if(global.isInternetOn()) {
init();
}else{
showConnectionAlert();
}
}
private void init() {
HashMap postData = new HashMap();
postData.put("token",global.getMyToken());
PostResponseAsyncTask readData = new PostResponseAsyncTask(ClientList.this,postData, this);
readData.execute(global.getURL() + "client_list.php");
}
@Override
public void processFinish(String s) {
Log.d(LOG,s);
list = new JsonConverter<Clients>().toArrayList(s,Clients.class);
BindDictionary<Clients> dictionary = new BindDictionary<Clients>();
dictionary.addStringField(R.id.textClientName, new StringExtractor<Clients>() {
@Override
public String getStringValue(Clients client, int position) {
return client.name;
}
});
dictionary.addStringField(R.id.textDomain, new StringExtractor<Clients>() {
@Override
public String getStringValue(Clients client, int position) {
return client.client;
}
});
dictionary.addStringField(R.id.textExpiry, new StringExtractor<Clients>() {
@Override
public String getStringValue(Clients client, int position) {
return client.days;
}
});
FunDapter<Clients> adapter = new FunDapter<>(ClientList.this,list,R.layout.layout_client_row,dictionary);
lv = (ListView) findViewById(R.id.clientList);
lv.setAdapter(adapter);
lv.setOnItemClickListener(this);
inputSearch = (EditText) findViewById(R.id.editSearchClient);
initTextFilter(adapter);
}
private void initTextFilter(final FunDapter<Clients> adapter) {
// init the filter in the adapter
adapter.initFilter(new FunDapterFilter<Clients>() {
@Override
public ArrayList<Clients> filter(String filterConstraint,
ArrayList<Clients> originalList) {
ArrayList<Clients> filtered = new ArrayList<Clients>();
for (int i = 0; i < originalList.size(); i++) {
Clients client = originalList.get(i);
Log.d(LOG, filterConstraint.toLowerCase());
if (client.name.toLowerCase().contains(filterConstraint.toLowerCase())) {
filtered.add(client);
}
}
return filtered;
}
});
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// now we can use the regular ListView API for filtering:
adapter.getFilter().filter(arg0);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}
@Override
public void afterTextChanged(Editable arg0) {
}
});
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
Clients selectedClient = list.get(position);
Intent in = new Intent(ClientList.this,ClientDetails.class);
in.putExtra("name", selectedClient.name);
in.putExtra("domain", selectedClient.client);
in.putExtra("contact", selectedClient.contact);
in.putExtra("regDate", selectedClient.reg_date);
in.putExtra("expireDate", selectedClient.exp_date);
in.putExtra("status", selectedClient.status);
in.putExtra("service", selectedClient.service);
in.putExtra("notes", selectedClient.notes);
in.putExtra("price", selectedClient.price);
in.putExtra("cid", selectedClient.id);
startActivity(in);
overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
}
public void showConnectionAlert(){
final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setTitle("Connection Problem!");
alertDialogBuilder.setMessage("Your mobile is not connected to the internet, do you want to connect it now?");
alertDialogBuilder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
//Toast.makeText(Main.this, "You clicked yes button", Toast.LENGTH_LONG).show();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("com.android.phone", "com.android.phone.NetworkSetting");
startActivity(intent);
}
});
alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
}
ArrayList<Clients> filtered = new ArrayList<Clients>();
package com.example.akbari.test;
导入android.app.AlertDialog;
导入android.content.DialogInterface;
导入android.content.Intent;
导入android.os.Bundle;
导入android.support.design.widget.FloatingActionButton;
导入android.support.design.widget.Snackbar;
导入android.support.v7.app.AppActivity;
导入android.support.v7.widget.Toolbar;
导入android.text.Editable;
导入android.text.TextWatcher;
导入android.util.Log;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.EditText;
导入android.widget.ListView;
导入com.amigold.fundapter.BindDictionary;
导入com.amigold.fundapter.fundapter;
导入com.amigold.fundapter.extractors.StringExtractor;
导入com.amigold.fundapter.interfaces.FunDapterFilter;
导入com.kosalgeek.android.json.JsonConverter;
导入com.kosalgeek.genasync12.AsyncResponse;
导入com.kosalgeek.genasync12.PostResponseAsyncTask;
导入java.io.Serializable;
导入java.util.ArrayList;
导入java.util.HashMap;
公共类ClientList扩展AppCompatActivity实现AsyncResponse,AdapterView.OnItemClickListener{
最终字符串LOG=“ClientList”;
ListView lv;
私有数组列表;
编辑文本输入搜索;
全球的;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u client\u list);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
FloatingActionButton fab=(FloatingActionButton)findViewById(R.id.fab);
fab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
//Snackbar.make(查看“替换为您自己的操作”,Snackbar.LENGTH\u LONG)
//.setAction(“Action”,null).show();
startActivity(新意图(ClientList.this,ClientInsert.class));
}
});
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
全局=((全局)getApplicationContext());
if(global.isInternetOn()){
init();
}否则{
showConnectionAlert();
}
}
私有void init(){
HashMap postData=新HashMap();
postData.put(“token”,global.getMyToken());
PostResponseAsyncTask readData=新的PostResponseAsyncTask(ClientList.this,postData,this);
readData.execute(global.getURL()+“client_list.php”);
}
@凌驾
公共void processFinish(字符串s){
对数d(对数s);
list=new JsonConverter().toArrayList(s,Clients.class);
BindDictionary=新建BindDictionary();
dictionary.addStringField(R.id.textClientName,新的StringExtractor(){
@凌驾
公共字符串getStringValue(客户端,int位置){
返回client.name;
}
});
dictionary.addStringField(R.id.textDomain,新的StringExtractor()){
@凌驾
公共字符串getStringValue(客户端,int位置){
返回client.client;
}
});
dictionary.addStringField(R.id.textExpiry,新的StringExtractor()){
@凌驾
公共字符串getStringValue(客户端,int位置){
返回客户。天;
}
});
FunDapter adapter=新的FunDapter(ClientList.this,list,R.layout.layout\u client\u row,dictionary);
lv=(ListView)findViewById(R.id.clientList);
低压设置适配器(适配器);
lv.setOnItemClickListener(本);
inputSearch=(EditText)findViewById(R.id.editSearchClient);
initTextFilter(适配器);
}
专用void initTextFilter(最终FunDapter适配器){
//初始化适配器中的过滤器
initFilter(新的FunDapterFilter(){
@凌驾
公共阵列列表筛选器(字符串筛选器约束,
ArrayList(原始列表){
ArrayList filtered=新的ArrayList();
对于(int i=0;i