2012-06-15 22 views
5

Tôi cần một số trợ giúp để thực hiện một cú nhấp chuột đơn giản trong một mục listview để mở Hoạt động mới. Tôi đã thấy rất nhiều vấn đề này ở đây nhưng không ai giúp tôi.bắt đầu hoạt động mới trên mục danh sách nhấp chuột

public class CustomListView extends ListActivity { 

    private EfficientAdapter adap; 
    ... 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.main); 

     adap = new EfficientAdapter(this); 
     setListAdapter(adap); 


    } 


    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     // TODO Auto-generated method stub 
     super.onListItemClick(l, v, position, id); 


     startActivity(new Intent(CustomListView.this, next.class)); 
    } 


    public static class EfficientAdapter extends BaseAdapter implements Filterable { 
     private LayoutInflater mInflater; 
     private Bitmap mIcon1; 
     private Context context; 

     public EfficientAdapter(Context context) { 
      // Cache the LayoutInflate to avoid asking for a new one each time. 
      mInflater = LayoutInflater.from(context); 
      this.context = context; 
     } 

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

      ViewHolder holder; 


      if (convertView == null) { 
       convertView = mInflater.inflate(R.layout.adaptor_content, null); 


       convertView.setOnClickListener(new OnClickListener() { 
        private int pos = position; 
        @Override 
        public void onClick(View v) { 


        } 
       }); 



      convertView.setTag(holder); 
      }else{ 
      // Get the ViewHolder back to get fast access to the TextView 
      // and the ImageView. 
      holder = (ViewHolder) convertView.getTag(); 
      } 


      return convertView; 
     } 

     ... 
    } 
} 

tôi đã cố gắng cũng thêm mã tiếp theo bên trong của phương pháp onCreate từ lớp CustomListView nhưng nó không hoạt động hoặc

ListView lv = getListView(); 

// listening to single list item on click 
lv.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 

     startActivity(new Intent(CustomListView.this, next.class)); 

    } 
}); 
+0

"Nó không hoạt động" rất mơ hồ ... Điều gì xảy ra trong ví dụ đầu tiên khi bạn nhấp vào một mục? Bạn có nhận được bất kỳ lỗi nào không? Xin vui lòng gửi chúng nếu bạn làm. – Sam

+0

@DDjordjevic: 'one' như thế nào trong' one.this' mà bạn truyền vào phương thức khởi tạo 'Intent'? Hãy thử 'CustomListView.this'. – Squonk

Trả lời

3

Xóa onListItemClick() từ lớp CustomListView của bạn và đặt phương thức startActivity() bên trong convertView.setOnClickListener().

convertView.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     startActivity(new Intent(getApplicationContext(), two.class)); 
    } 
}); 
0

Hãy thử đặt startActivity(new Intent(one.this, two.class)); -code vào

convertView.setOnClickListener(new OnClickListener() { 
    private int pos = position; 
    @Override 
    public void onClick(View v) {...} 
}); 

gì hiện một.this đề cập đến? Cần phải là Context

+0

Cách tiếp cận này là một trong số những nỗ lực mà tôi đã cố gắng, nhưng tôi đã nhận các lỗi sau đây: Nhiều dấu tại dòng này \t - Không thể làm cho một tham chiếu tĩnh để phương pháp startActivity không tĩnh (Ý định) từ loại \t Hoạt động \t - Không có trường hợp kèm theo của loại CustomListView có thể truy cập trong phạm vi. Tôi cũng đã thay đổi một lớp học cho đúng lớp mà tôi đang sử dụng, xin lỗi vì điều đó. –

+0

Thử 'startActivity (new Intent (context, two.class));', vì ngữ cảnh được chuyển tới 'Adapter' – Nick

+0

-Không hoạt động, tôi cũng đã thử trước đây, ném lỗi: Không thể tạo tham chiếu tĩnh tới phương thức nonA static startActivity (Intent) từ kiểu Activity –

0

Trong mã số one.this là số Context.

Vì tên Hoạt động của bạn là CustomListView, bạn nên viết CustomListView.this thay vì one.this.

Bạn cũng có thể sử dụng getApplicationContext().

1

Hãy thử mã này. Tôi chắc chắn Nó sẽ giúp bạn và không đặt lớp cho một tập tin xml như thế này;

setContentView(R.layout.second); 

đảm bảo rằng bạn đã đặt mã đó ở trên lớp học của mình, nếu không bạn sẽ gặp lỗi khi mở một hoạt động mới.

package com.exampled.list; 

import android.os.Bundle; 
import android.app.ListActivity; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

public class MainActivity extends ListActivity { 

    String [] names ={ 
     "Iphone", 
     "Samsung", 
     "Nokia", 
     "Ericsson", 
     "BlackBerry", 
     "Benq" 
    }; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //setContentView(R.layout.activity_main); 
     setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,names)); 
    } 

    public void onListItemClick(ListView Parent, View v, int position,long id){ 
     startActivity(new Intent(MainActivity.this, Second.class)); 
     //Toast.makeText(this, "Clicked on : " + names[position], Toast.LENGTH_LONG).show(); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 
Các vấn đề liên quan