Android从适配器过滤

Android从适配器过滤,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

我是Android新手,我从Mysql创建了一个数据列表,当我过滤Listview时,它工作正常,但当我点击过滤项时,它得到了错误的对象Id,但我想要的是,当我点击过滤项时,它应该显示正确的项Id

  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