2013-10-25 3 views
0

Нажмите ListItem в ListView, но не отвечает, но longClickListener отвечает. И я хочу начать новое действие, когда пользователь нажимает на элемент списка.Нажмите, чтобы ListItem в ListView не ответил

Что я пробовал:

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

@ СиликонКиллер правильный. Если это не сработает, вы можете определить 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 не получает щелчок.

- ListView Sample with TextView

1

пытаются удалить орудия заявление в вашем MainActivtiy.

+2

это может решить выше проблема .. ?? что такое связь между инструментами onCLickListener и 'onItemClickListener()' .. ??? – SilentKiller

+0

здесь: http://stackoverflow.com/questions/6090666/onitemclicklistener-and-onclicklistener-in-listview это описывает проблему с обоими слушателями – Dima

+0

в этом вопросе требования были разные здесь разные. в этом вопросе он хочет нажать на imgeview, а также на textview. пожалуйста нестандартное требование ясно сначала затем ответ. :) – SilentKiller

Смежные вопросы