2013-10-25 59 views
0

單擊ListView中的ListItem不響應,但longClickListener正在響應。我想在用戶點擊列表視圖項目時開始一項新活動。單擊ListView中的ListItem不響應

我試了一下:

android:clickable="false" // and true - not working 
android:descendantFocusability="blocksDescendants" // no change with or without it 

爲什麼onItemClickListener沒有響應?

MainActivity.xml

public class MainActivity extends Activity implements OnClickListener 
{ 
    private ListView remindersList; 
    private ImageView createEvent; 
    private ImageView deleteEvent; 
    private TextView noRemindersSet; 
    private String[] values = {"One", "Two", "Three"}; 
@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    createEvent = (ImageView) findViewById(R.id.imageView2); 
    deleteEvent = (ImageView) findViewById(R.id.imageView1); 
    createEvent.setOnClickListener(this); 
    deleteEvent.setOnClickListener(this); 
    remindersList = (ListView) findViewById(android.R.id.list); 

    ListViewArrayAdapter adapter = new ListViewArrayAdapter(MainActivity.this, 
      android.R.id.list, values); 
    //setting the adapter 
    remindersList.setAdapter(adapter); 
    remindersList.setTextFilterEnabled(true); 
    remindersList.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 

      Log.d("s click","id: "); 
     }}); 

    remindersList.setLongClickable(true); 
    remindersList.setOnItemLongClickListener(new OnItemLongClickListener() { 
     public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int pos, long id) 
     { 
      Log.d("long clicked","id: " + id); 
      return true; 
     } 
    }); 
} 
} 

數組適配器

public class ListViewArrayAdapter extends ArrayAdapter<String> 
{ 

private final Context context; 
String[] values; 
private TextView textView; 

public ListViewArrayAdapter(Context context, int resource, String[] values) { 
    super(context, resource, values); 
    // TODO Auto-generated constructor stub 
    this.context = context; 
    this.values = values; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) 
{ 
    LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View rowView = inflater.inflate(R.layout.list_item, parent, false); 
    textView = (TextView) rowView.findViewById(R.id.textView1); 
    textView.setText(values[position]); 
    return rowView; 
    } 

} 

List_View.xml

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

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#01B0F1" 
    android:longClickable="true" 
    android:paddingBottom="2dp" 
    android:paddingLeft="5dp" 
    android:paddingRight="5dp" 
    android:paddingTop="2dp" 
    android:text="@string/textview" 
    android:textColor="#FFFFFF" 
    android:textSize="25sp" /> 

</LinearLayout> 
+0

set TextView'android:focusableInTouchMode =「false」' 'android:focusable =「false」' – SilentKiller

+0

你把setClickable放在代碼中,ex list.setClickable(true);當從xml移動到實際顯示時可能會發生變化。因爲這只是與longClick的區別。 – Dejan

+1

@SilentKiller是對的。如果這不起作用,你可以在你的arrayAdapter上定義一個onClickListner。 – Dyna

回答

2

更改適配器上的這種方法:

@Override 
public View getView(final int position, View convertView, ViewGroup parent) 
{ 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View rowView = inflater.inflate(R.layout.list_item, parent, false); 
    rowView.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Log.d("s click","id: "); 
       Intent i = new Intent(context, yourActivity.class); //change your activity to the one you want to launch 
       context.startActivity(i); //you already had your context defined above so just use it to start the activity 

      } 
     }); 

    textView = (TextView) rowView.findViewById(R.id.textView1); 
    textView.setText(values[position]); 

    return rowView; 
    } 

} 

並刪除remindersList.setOnItemClickListener。這將工作;)

0

嘗試此..

remindersList.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View v, int pos, 
       long id) { 

      Log.d("s click","pos: "+ pos); 
      Log.d("s click","id: "+ id); 
     }}); 
2

集的TextView

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

這會讓你的清單可聚焦 其他焦點移動到TextView的,並沒有得到點擊您的列表視圖。

- ListView Sample with TextView

1

嘗試刪除您MainActivtiy implements語句。

+2

這是否可以解決上述問題。 'implements onCLickListener'和'onItemClickListener()'之間的關係是什麼???? – SilentKiller

+0

這裏:http://stackoverflow.com/questions/6090666/onitemclicklistener-and-onclicklistener-in-listview這個描述了這兩個聽衆的問題 – Dima

+0

在這個問題的要求是不同的這裏不同。在這個問題中,他想單擊imgeview以及textview。請先清楚標明要求然後回答。 :) – SilentKiller