2012-07-25 90 views
1

大家好。我的目标是当我想点击ListView中的特定项目时,它会打开一个我编程的新活动。例如:当我点击“João”时,我希望它打开一个名为Joao的类。我试过使用简单的代码,但它不起作用。当我从ListView中点击João的名字时,什么也没有发生。如何ListView使用onClick打开一个新的活动?

这是我的代码,我使用:

public class Searchsort extends Activity { 

    private ListView lv1; 
    private EditText ed; 
    private String lv_arr[]={"John","Mary","Carl","Rose","Charlie","Allan", "João"}; 
    private ArrayList<String> arr_sort= new ArrayList<String>(); 
    int textlength=0; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 
     lv1 = (ListView)findViewById(R.id.ListView01); 
     ed = (EditText)findViewById(R.id.EditText01); 

     // By using setAdpater method in listview we an add string array in list. 

     lv1.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 , lv_arr)); 
     ed.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=ed.getText().length(); 
       arr_sort.clear(); 
       for(int i=0;i<lv_arr.length;i++) { 
        if(textlength<=lv_arr[i].length()) { 
         if(ed.getText().toString().equalsIgnoreCase((String) lv_arr[i].subSequence(0, textlength))) { 
          arr_sort.add(lv_arr[i]); 
         } 
        } 
       } 

       lv1.setAdapter(new ArrayAdapter<String> (Searchsort.this,android.R.layout.simple_list_item_1 , arr_sort)); 

      } 
     }); 
    } 

    public void onListItemClick(ListView parent, View v, int position, long id) { 
     if ("João".equals(lv_arr[position])) { 
      Intent myIntent = new Intent(Searchsort.this, Joao.class); 
      startActivity(myIntent); 
     } 
    } 

} 
+0

什么是使用一个开关或者如果条件的问题? – 2012-07-25 06:23:19

回答

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

     Intent intent = new Intent(Searchsort.this, Joao.class);             

        startActivity(intent);   
       } 
      }   
     }); 
+0

我想我向你解释错了。澄清和改进我的问题。字符串的每个元素(名称)都应该打开一个我想要的新活动。例如“Mary”应该打开“x.class”。 John打开“y.class”,Charlie打开“y.class”,João“joao.class”,等等......明白了吗? – user1550421 2012-07-25 05:44:25

+0

使用我的代码有什么问题? public void onListItemClick(ListView parent,View v,int position,long id){if(“João”.equals(lv_arr [position])){ 意图myIntent = new Intent(Searchsort.this,Joao.class); startActivity(myIntent); } – user1550421 2012-07-25 13:46:26

0

使用setOnItemClickListenerListView和处理活动开幕那里。

0

请检查您的Androidmanifest.xml

添加声明,如:

<activity android:name=".CLASS_NAME"> </activity> 

您必须声明一样,所有的活动。

+0

我已经宣布它。但它仍然不起作用 – user1550421 2012-07-25 05:46:43

+0

是的。我知道。我宣布了我的活动。但它仍然不起作用!我的代码有什么问题? – user1550421 2012-07-25 13:57:38

0

作为Niko建议按以下方式使用setOnItemClickListener()。

public class Searchsort extends Activity { 

private ListView lv1; 
private EditText ed; 
private String lv_arr[]={"John","Mary","Carl","Rose","Charlie","Allan", "João"}; 
private ArrayList<String> arr_sort= new ArrayList<String>(); 
int textlength=0; 
private String getItem; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 
    lv1 = (ListView)findViewById(R.id.listView1); 
    ed = (EditText)findViewById(R.id.EditText01); 

    // By using setAdpater method in listview we an add string array in list. 

    lv1.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 , lv_arr)); 
    // Here I have set Listener for listview 
    lv1.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      // TODO Auto-generated method stub 
// Here I am getting the selected item of listview. 
      getItem = (arg0.getItemAtPosition(arg2).toString()); 

      if(getItem.equals("John")) 
      { 
       Intent i = new Intent(Searchsort.this,John.class); 
       startActivity(i); 
      } 
     } 
    }); 
    ed.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=ed.getText().length(); 
      arr_sort.clear(); 
      for(int i=0;i<lv_arr.length;i++) { 
       if(textlength<=lv_arr[i].length()) { 
        if(ed.getText().toString().equalsIgnoreCase((String) lv_arr[i].subSequence(0, textlength))) { 
         arr_sort.add(lv_arr[i]); 
        } 
       } 
      } 
      lv1.setAdapter(new ArrayAdapter<String> (Searchsort.this,android.R.layout.simple_list_item_1 , arr_sort)); 
     } 
    }); 
}  
} 
+0

嗨。我试过这个。但不起作用。我在清单文件中提到了我的活动。你能澄清一下,把这段代码放在我的代码中吗?正如我之前说过的:当我从ListView中点击某个人的名字时没有任何事情发生:/ – user1550421 2012-07-25 13:35:49

+0

@ user1550421我已经在帖子中进行了必要的更改,请找到它并让我知道它是否正常工作。 :) – Akshay 2012-07-25 17:40:54

+0

@ user1550421你是否尝试过更新的code.Is它工作与否? – Akshay 2012-07-28 06:07:59

0

试试这个..

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

if(position == 1) 
{ 

     Intent myIntent = new Intent(YourActivity.this, SecondActivity.class); 
      startActivityForResult(myIntent, 0); 
} 

if(position == 2) 
{ 

     Intent myIntent = new Intent(YourActivity.this, ThirdActivity.class); 
      startActivityForResult(myIntent, 0); 
} 
    } 
    }); 

希望这将帮助你:-)

相关问题