2012-06-26 59 views
0

我有三個列表,其中包含「root,top和down」。 但是當我用「top」過濾列表,然後點擊列表中出現的就是「root」。我怎麼能使它成爲我們過濾的可點擊列表?如何獲得與搜索框自定義列表視圖被點擊?

list.java

public class root extends Activity { 

EditText edittext; 
ListView listview; 

private String[] text = { "ROOT", "TOP", "DOWN" }; 

private int[] image = { R.drawable.root, R.drawable.top, R.drawable.down }; 

int textlength = 0; 

ArrayList<String> text_sort = new ArrayList<String>(); 
ArrayList<Integer> image_sort = new ArrayList<Integer>(); 

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mainlistview); 

    this.getWindow().setSoftInputMode(
      WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

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

    listview.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 

      if ("ROOT".equals(text[position])) { 
       Intent myIntent = new Intent(view.getContext(), 
         root.class); 
       startActivityForResult(myIntent, 0); 

      } 
      if ("TOP".equals(text[position])) { 
       Intent myIntent = new Intent(view.getContext(), 
         top.class); 
       startActivityForResult(myIntent, 0); 
      } 
      if ("DOWN".equals(text[position])) { 
       Intent myIntent = new Intent(view.getContext(), 
         down.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 (edittext 
          .getText() 
          .toString() 
          .equalsIgnoreCase(
            (String) text[i].subSequence(0, 
              textlength))) { 
         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); 

    } 
} 

}

main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<EditText 
    android:id="@+id/EditText01" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:hint="Search" > 
</EditText> 

<ListView 
    android:id="@+id/ListView01" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 
</ListView> 

listview.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:background="#fff200" 
android:gravity="left|center" 
android:paddingBottom="5px" 
android:paddingLeft="5px" 
android:paddingTop="5px" > 

<ImageView 
    android:id="@+id/ImageView01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 
</ImageView> 

<TextView 
    android:id="@+id/TextView01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="10px" 
    android:textColor="#0099CC" 
    android:textSize="20px" 
    android:textStyle="bold" > 
</TextView> 

回答

0

問題在於你對你的ListViewonItemClickListener內:

listview.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 

     if ("ROOT".equals(text[position])) { 
      Intent myIntent = new Intent(view.getContext(),class); 
      startActivityForResult(myIntent, 0); 

已篩選您ListView後,您ListView將只顯示1項。當你點擊這個項目時,onItemClick會被觸發。因爲您點擊的項目位於新過濾的ListView的第一個位置,因此變量position爲0.您的Array text[]中的第一項爲「ROOT」,因此RootActivity將啓動。

解決方案

問問你的適配器,查看你點擊和比較,爲的字符串:

內,您的onItemClicked(..)

View selectedView = yourAdapter.getItemAtPosition(position) 
TextView myText = (TextView) selectedView.findViewById(R.id.TextView01).getText() 

if(myText.equals("ROOT")){ 
    // start Activity.. 
+0

我沒有任何想法,所以我只是把這 「查看selectedView = MyCustomAdapter.getItemAtPosition(位置) TextView myText =(TextView)selectedView.findViewById(Ri d.TextView01).getText()「 - in my:」public void onItemClick(AdapterView parent,View view, int position,long id){「 – user1482732

+0

我上傳了文件http://www.mediafire.com /?binttnilkoh5iuc你能幫我解決它..謝謝 – user1482732

+0

我提供的代碼可能不會工作,如果你複製粘貼字面。這是給你一個可能的解決方案的想法:) – DroidBender

相關問題