2012-01-24 43 views
0

我的列表視圖和搜索框有問題。搜索工作正常,除了區分大小寫。但是,我的問題是,點擊後立即開始一項活動。 開始活動基於文本的位置。因此,如果我不進行任何研究,鏈接工作正常。然而,如果我研究具體的列表視圖的作品,但鏈接是錯誤的,因爲它們是基於列表視圖的初始位置,而不是按類別排序。從搜索框的列表視圖開始活動

import greendroid.app.GDActivity; 
import greendroid.widget.ActionBarItem; 
import greendroid.widget.NormalActionBarItem; 

import java.util.ArrayList; 
import android.content.Intent; 
import android.os.Bundle; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.Window; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.TextView; 

public class m_m_aeritalia extends GDActivity { 
     EditText edittext; 
     ListView listview; 
     Button search; 

     String[] text = { "(Lockheed) F-104S Starfighter", 
         "Aermecchi/EMBRAER AMX", "G-222" }; 

     int[] image = { R.drawable.tf1, R.drawable.tf7, R.drawable.ts26 }; 
     int textlength = 0; 
     ArrayList<String> text_sort = new ArrayList<String>(); 
     ArrayList<Integer> image_sort = new ArrayList<Integer>(); 

     public void onCreate(Bundle savedInstanceState) { 

       requestWindowFeature(Window.FEATURE_NO_TITLE); 

       super.onCreate(savedInstanceState); 
       setActionBarContentView(R.layout.m_listgeneral); 

       addActionBarItem(
           getActionBar().newActionBarItem(NormalActionBarItem.class) 
               .setDrawable(R.drawable.ic_title_back), 
           R.id.action_bar_back); 

       edittext = (EditText) findViewById(R.id.EditText01); 
       listview = (ListView) findViewById(R.id.ListView01); 
       listview.setAdapter(new MyCustomAdapter(text, image)); 

       listview.setClickable(true); 
       listview.setOnItemClickListener(new OnItemClickListener() { 
         public void onItemClick(AdapterView<?> parent, View view, 
             int position, long id) { 
           if ("(Lockheed) F-104S Starfighter".equals(text[position])) { 
             // code specific to 2nd list item 
             Intent myIntent = new Intent(view.getContext(), 
                 mcomingsoon.class); 
             startActivityForResult(myIntent, 0); 
           } 

           if ("Aermecchi/EMBRAER AMX".equals(text[position])) { 
             // code specific to 2nd list item 
             Intent myIntent = new Intent(view.getContext(), 
                 mcomingsoon.class); 
             startActivityForResult(myIntent, 0); 
           } 

           if ("G-222".equals(text[position])) { 
             // code specific to 2nd list item 
             Intent myIntent = new Intent(view.getContext(), 
                 fa_f4.class); 
             startActivityForResult(myIntent, 0); 
           } 

         } 

       }); 

       edittext.addTextChangedListener(new TextWatcher() { 

         public void afterTextChanged(Editable s) { 

         } 

         public void beforeTextChanged(CharSequence s, int start, int count, 
             int after) { 

         } 

         public void onTextChanged(CharSequence s, int start, int before, 
             int count) { 

           textlength = edittext.getText().length(); 
           text_sort.clear(); 
           image_sort.clear(); 

           for (int i = 0; i < text.length; i++) { 
             if (textlength <= text[i].length()) { 
               if (text[i].indexOf(edittext.getText().toString()) != -1) { 
                 text_sort.add(text[i]); 
                 image_sort.add(image[i]); 
               } 
             } 
           } 

           listview.setAdapter(new MyCustomAdapter(text_sort, image_sort)); 

         } 
       }); 
     } 

     class MyCustomAdapter extends BaseAdapter { 

       String[] data_text; 
       int[] data_image; 

       MyCustomAdapter() { 

       } 

       MyCustomAdapter(String[] text, int[] image) { 
         data_text = text; 
         data_image = image; 
       } 

       MyCustomAdapter(ArrayList<String> text, ArrayList<Integer> image) { 

         data_text = new String[text.size()]; 
         data_image = new int[image.size()]; 

         for (int i = 0; i < text.size(); i++) { 
           data_text[i] = text.get(i); 
           data_image[i] = image.get(i); 
         } 

       } 

       public int getCount() { 
         return data_text.length; 
       } 

       public String getItem(int position) { 
         return null; 
       } 

       public long getItemId(int position) { 
         return position; 
       } 

       public View getView(int position, View convertView, ViewGroup parent) { 

         LayoutInflater inflater = getLayoutInflater(); 
         View row; 

         row = inflater.inflate(R.layout.listview, parent, false); 

         TextView textview = (TextView) row.findViewById(R.id.TextView01); 
         ImageView imageview = (ImageView) row 
             .findViewById(R.id.ImageView01); 

         textview.setText(data_text[position]); 
         imageview.setImageResource(data_image[position]); 

         return (row); 

       } 
     } 

     @Override 
     public boolean onHandleActionBarItemClick(ActionBarItem item, int position) { 

       switch (item.getItemId()) { 
       case R.id.action_bar_back: 
         startActivity(new Intent(this, mbymanufacturers.class)); 
         break; 

       } 

       return true; 

     } 

希望我自己清楚, 有什麼建議嗎?

謝謝 蒂貝里奧Bozotti表示

回答

0

你不應該查詢字符串數組directy,但是從適配器獲得該項目。

嘗試......

創建一個自定義的私有類來保存字符串和整型值對,如:

private class DataPair { String text; int value; } 

然後,而不是用MyCustomAdapter,創建DataPair的ArrayList對象並將其分配給一個ArrayAdapter,如:

new ArrayAdapter<DataPair>(this, R.layout.ListView01, new ArrayList<DataPair>); 

現在,讓你的數據,你唯一需要做的:

getItem(position).text 

getItem(position).value 

在setOnItemClickListener使用的情況下:

((DataPair)listview.getAdapter().getItem(position)).text