5

Tôi đang cố gắng thiết lập onItemClickListener với một bộ điều hợp tùy chỉnh và thiết lập listview. Có vẻ như không thể khiến người nghe làm việc. Tôi không nghĩ rằng tôi đang thiết lập nó đúng cách. Bất kỳ trợ giúp được đánh giá cao. Cảm ơn rất nhiều.onItemClickListener với bộ điều hợp tùy chỉnh và danh sách xem

Adaptor:

public class ModuleAdapter extends ArrayAdapter<Module> { 

Context context; 
int layoutResourceId; 
Module data[]; 

public ModuleAdapter(Context context, int layoutResourceId, 
     Module data[]) { 
    super(context, layoutResourceId, data); 
    this.layoutResourceId = layoutResourceId; 
    this.context = context; 
    this.data = data; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    ModuleHolder holder = null; 

    if(row == null) 
    { 
     LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 

     holder = new ModuleHolder(); 
     holder.modJapTitle = (TextView)row.findViewById(R.id.moduleJapTitle); 
     holder.modEngTitle = (TextView)row.findViewById(R.id.moduleEngTitle); 
     holder.modComp = (TextView)row.findViewById(R.id.moduleCompletion); 
     holder.modRating = (RatingBar)row.findViewById(R.id.moduleScore); 

     row.setTag(holder); 
    } 
    else 
    { 
     holder = (ModuleHolder)row.getTag(); 
    } 

    Module module = data[position]; 
    holder.modJapTitle.setText(module.moduleJapaneseTitle); 
    holder.modEngTitle.setText(module.moduleEnglishTitle); 
    holder.modComp.setText(module.moduleCompletionRate); 
    holder.modRating.setRating(module.moduleRating); 

    return row; 
} 

static class ModuleHolder 
{ 
    TextView modEngTitle; 
    TextView modJapTitle; 
    TextView modComp; 
    RatingBar modRating; 
} 

}

Thực hiện:

ModuleAdapter moduleData = new ModuleAdapter(this, R.layout.module_box_item, module_data); 
    ListView listView1 = (ListView)findViewById(R.id.moduleListContainer); 
    listView1.setAdapter(moduleData); 
    listView1.setCacheColorHint(Color.TRANSPARENT); 
    listView1.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Log.v("Module Item Trigger", "Module item was triggered"); 
      Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

Ngoài ra ở đây là Layout XML cho một trong những mặt hàng duy nhất trong danh sách:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
style="@style/moduleBox" 
android:id="@+id/moduleBoxSingle" > 

<TextView 
    android:id="@+id/moduleJapTitle" 
    style="@style/moduleTitleJap" /> 
<TextView 
    android:id="@+id/moduleCompletion" 
    android:layout_above="@+id/moduleSepartor" 
    style="@style/moduleCompletion" /> 
<View 
    android:id="@+id/moduleSepartor" 
    android:layout_below="@+id/moduleJapTitle" 
    style="@style/moduleSeperator" /> 
<TextView 
    android:id="@+id/moduleEngTitle" 
    android:layout_below="@+id/moduleSepartor" 
    style="@style/moduleTitleEng" /> 
<RatingBar 
    android:id="@+id/moduleScore" 
    android:layout_below="@+id/moduleSepartor" 
    style="@style/moduleRating" 
    android:layout_alignParentRight="true" /> 

</RelativeLayout> 
+1

Tất cả mọi thứ dường như nhìn tốt. Có lẽ đó là một vấn đề giao diện người dùng? Tại sao bạn không viết để logcat thay vì popping lên một Toast. Chỉ cần chắc chắn 100% người nghe của bạn không được gọi. –

+1

bạn có thể đăng bố cục xml của mình tại đây không. – rajpara

+1

Xin chào, cảm ơn bạn đã trả lời. Tôi đã thêm vào dòng để ghi vào Logcat. Và tôi cũng đã thêm vào trong bố cục XML được sử dụng cho từng mục danh sách duy nhất. – mwrazam

Trả lời

16

Tôi nghĩ rằng đó là vấn đề tương tự như this.

Thêm bên dưới mã để TextView của bạn trong XML

android:focusableInTouchMode="false" 
android:clickable="false" 
android:focusable="false" 

và thử lại.

+3

Điều này đã làm các trick! Cảm ơn bạn rất nhiều. Rất nhiều tóc đã được cứu. :) – mwrazam

4

Trước hết cho này bạn phải impliments lớp với xử lý sau

implements OnItemClickListener 

sau đó thêm một chức năng như đưa ra dưới đây onItemClick()

public void onItemClick(AdapterView parent, View v, int position, long id) { 
    Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show(); 
} 

Và khi chúng tôi đặt bộ chuyển đổi dữ liệu vào listview sau đó thêm dòng sau mã

itemlist.setOnItemClickListener(this); 

Hy vọng điều này sẽ làm việc cho bạn ...

+1

Xin chào, cảm ơn bạn đã trả lời.Tôi đã thử này, nhưng kết quả là giống như mã ban đầu tôi có ở trên. Có lẽ cái gì khác là sai với mã của tôi mà không phải là bắn mà nghe? – mwrazam

1

Hãy thử này ...

ListView lv = (ListView)findViewById(R.id.Your_ListView_Id); // If it extends Activity. 

HOẶC

ListView lv = getListView; // If it extends ListActivity. 
lv.setOnItemClickListener(this); // Make the Activity implement onItemClickListener 
lv.setAdapter(your_adapter); 

Edited phần: Thay đổi được thực hiện trong bối cảnh Toast, và gia tăng SysOut

// Phương pháp mà sẽ xử lý các sự kiện.

public void onItemClick(AdapterView parent, View v, int position, long id{ 
    Toast.makeText(Your_Activity_Name.this, "hello", Toast.LENGTH_SHORT).show(); 
    System.out.println("This is a Test"); 
} 

KIỂM TRA BẠN ĐĂNG NHẬP .. BÁO CÁO SYSOUT NHẬN ĐƯỢC IN !!

+1

Xin chào, cảm ơn tin nhắn của bạn. Thật không may, điều này không hoạt động. Tin nhắn chúc mừng vẫn không kích hoạt. – mwrazam

+1

Chỉ cần một phút ....... thử này .. Toast.make Toast.makeText (Your_Activity_Name.this, "hello", Toast.LENGTH_SHORT) .show(); –

2

Tôi có cùng một vấn đề và tôi sửa chữa nó bằng cách làm thích: (tham khảo từ https://github.com/sephiroth74/HorizontalVariableListView/issues/33) thêm dòng này theo quan điểm gốc trong cách bố trí

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
style="@style/moduleBox" 
android:id="@+id/moduleBoxSingle" 
android:descendantFocusability="blocksDescendants" > 
Các vấn đề liên quan