Пользовательский список: верхняя половина не кликабельна - PullRequest
0 голосов
/ 28 марта 2012

Я создал собственный список с помощью onItemClickListener, и только нижняя половина активна.В списке используется ImageAdapter, который расширяет ArrayAdapter.Каждая строка имеет два ImageViews и TextView, которые используют следующие аргументы xml

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

Я следовал этому учебнику и даже пытался удалить TextView и ImageView.Список не был кликабельным вообще после их удаления.

Это моя mainActivity

public class ClickTestActivity extends ListActivity  
{ 
String[] listItems={"alpha", "beta", "gamma", "delta", "epsilon"};  
boolean[] listImages={true, false, true, false, true}; 

@Override
public void onCreate(Bundle savedInstanceState)  
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    setListAdapter(new ImageAdapter(this, R.layout.main, R.id.text1, R.id.image1, listItems, listImages )); 
    getListView().setOnItemClickListener(new OnItemClickListener() { 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {        

            Toast.makeText(getApplicationContext(), "Test", Toast.LENGTH_SHORT).show();


        } 
    }); 
} 
} 

и мой ImageAdapter

public class ImageAdapter extends ArrayAdapter  
{  
Activity context; 
String[] items; 
boolean[] arrows; 
int layoutId; 
int textId; 
int imageId; 

ImageAdapter(Activity context, int layoutId, int imageId, String[] items, boolean[] arrows)  
{  
    super(context, layoutId, items);  

    this.context = context;  
    this.items = items; 
    this.arrows = arrows; 
    this.layoutId = layoutId; 
    this.textId = textId; 
    this.imageId = imageId; 
}  

public View getView(int pos, View convertView, ViewGroup parent)  
{  
    LayoutInflater inflater=context.getLayoutInflater();  
    View row=inflater.inflate(layoutId, null);  
    TextView label=(TextView)row.findViewById(textId);  

    label.setText(items[pos]);  

    if (arrows[pos])  
    {  
     ImageView icon=(ImageView)row.findViewById(imageId);   
        icon.setImageResource(R.drawable.ic_launcher);  
    }     

    return(row);  
}  
} 

и main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/layercontainer"
   android:orientation="horizontal"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:background="#ffffff">     
   <ListView 
      android:id="@android:id/list"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"/> 
   <TextView
      android:id="@+id/text1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentLeft="true" 
      android:padding="10dp"
      android:textSize="16sp"
      android:textColor="#000000"    
      android:focusable="false" 
      android:focusableInTouchMode="false"
      android:clickable="false"/> 
   <ImageView
      android:id="@+id/image1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentRight="true"
      android:focusable="false" 
      android:focusableInTouchMode="false"
      android:clickable="false"/> 
 </RelativeLayout> 

1 Ответ

0 голосов
/ 28 марта 2012

Надписываемый макет listView должен быть другого макета.Попробуйте использовать другой XML для TextView и ImageView внутри listView, скажем, list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layercontainer"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ffffff">     

<TextView
  android:id="@+id/text1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignParentLeft="true" 
  android:padding="10dp"
  android:textSize="16sp"
  android:textColor="#000000"    
  android:focusable="false" 
  android:focusableInTouchMode="false"
  android:clickable="false"/> 
<ImageView
   android:id="@+id/image1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
  android:layout_alignParentRight="true"
  android:focusable="false" 
  android:focusableInTouchMode="false"
  android:clickable="false"/> 
 </RelativeLayout> 

В main.xml есть только просмотр списка.Измените

 setListAdapter(new ImageAdapter(this, R.layout.main, R.id.text1, R.id.image1, listItems, listImages )); 

на

 setListAdapter(new ImageAdapter(this, R.layout.list_item, R.id.text1, R.id.image1, listItems, listImages )); 
...