自定义列表:上半部分无法点击

时间:2012-03-28 08:23:54

标签: android android-arrayadapter clickable custom-lists onclicklistener

我使用onItemClickListener创建了一个自定义列表,只有下半部分是可点击的。该列表使用了一个扩展ArrayAdapter的ImageAdapter。 每行有两个ImageView和一个TextView,它们使用以下xml参数

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

我遵循了this教程,甚至尝试删除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 :(得分:0)

要充气的listView布局应该是不同的布局。尝试使用另一个xml用于TextView,并使用listView中的ImageView说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中只有listview。变化

 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 ));