2016-03-12 98 views
1

我是Android新手我從Mysql創建了一個數據列表,當我過濾Listview時它可以正常工作,但是當我點擊過濾項目時,它會得到錯誤的對象ID,但我想要的是當我點擊過濾後的項目,它應該顯示正確的項目ID。來自適配器的Android過濾

這是代碼:

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(); 
    } 
} 

回答

0

insted的的

ArrayList<Clients> filtered = new ArrayList<Clients>(); 

使用

list= new ArrayList<Clients>(); 
相關問題