2013-12-24 22 views
0

Итак, у меня есть простой список с элементом списка, который содержит текстовое представление и два изображения. Я хочу, чтобы оба изображения отображались как кнопки. К сожалению, я даже не могу заставить одного из них работать. Просмотр списка загружается, но затем приложение вылетает при касании любого изображения. Вот XML для ListItem:Кнопка в простом ListView onClick

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/bg_card"> 
    <TextView 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:textColor="@color/Black" 
     android:id="@+id/name" 
     android:textSize="20sp" 
     android:padding="16dp"> 

    </TextView> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="right" 
     android:gravity="right"> 
     <ImageView 
      android:layout_width="40dp" 
      android:layout_height="fill_parent" 
      android:id="@+id/email" 
      android:clickable="true" 
      android:src="@drawable/ic_action_email" 
      android:layout_margin="8dp"/> 
     <View 
      android:layout_width="2dp" 
      android:layout_height="match_parent" 
      android:background="@color/LightGrey" /> 
     <ImageView 
      android:layout_width="40dp" 
      android:layout_height="fill_parent" 
      android:id="@+id/internet" 
      android:clickable="true" 
      android:layout_margin="8dp" 
      android:src="@drawable/ic_action_web_site" /> 
     </LinearLayout> 


</LinearLayout> 

Вот макет с ListView:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 
    <ListView 
     android:id="@+id/lvDepartments" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="8dp" 
     android:padding="8dp" 
     android:smoothScrollbar="true" 
     android:scrollbarStyle="insideOverlay" 
     android:listSelector="@color/Navy"/> 
</LinearLayout> 

Вот это код, связанный с Java:

 @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.staff_layout);   
    staffmemberlist = (ListView)findViewById(R.id.lvDepartments); 
    ArrayAdapter<String> arrayAdapter =new ArrayAdapter<String>         (getApplicationContext(),R.layout.emailbrowsingcard,R.id.name, d); 
    staffmemberlist.setAdapter(arrayAdapter); 

    mailbutton=(ImageView)findViewById(R.id.email); 
    mailbutton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getApplicationContext(), 
       "This line would appear on clicking this icon", 
       Toast.LENGTH_LONG).show(); 
        } 
       }); 
} 
+2

Может у нас есть LogCat, а также, пожалуйста? – psyren89

+0

Для этого есть также изображение «ImageButton». Если вы установите свой фон на 'android.R.color.transparent', то он появится точно так же, как' ImageView' http://developer.android.com/reference/android/widget/ImageButton.html – Gabe

+0

'E/AndroidRuntime: FATAL EXCEPTION: main java.lang.RuntimeException: не удалось запустить активность ComponentInfo {com.tod.android.bths/com.tod.android.bths.FinalStaff}: java.lang.NullPointerException' – trickedoutdavid

ответ

1

это не идет работать, потому что ImageView находится в списке предметов, поэтому вам следует рассмотреть возможность делать.

mailButton = (ImageView) row.findViewById(R.id.email); 

где строка - это список элементов. помните, что ImageView не находится в staff_layout, он находится в вашем item_layout.

, чтобы сделать его работу вам необходимо переместить этот блок:

mailbutton=(ImageView)findViewById(R.id.email); 
mailbutton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(getApplicationContext(), 
      "This line would appear on clicking this icon", 
      Toast.LENGTH_LONG).show(); 
       } 
      }); 

к GetView() в классе адаптера. и пусть View получит findViewById или имеет экземпляр элемента item_layout, чтобы добраться до кнопок.

+0

как бы определить строку? это верхний linearlayout в списке? Итак, 'row = (LinearLayout) findViewById (R.id. )' – trickedoutdavid

+0

вы можете добавить свой класс адаптивного адаптера, чтобы вы могли его хорошо понять, и я могу вам помочь. – Coderji

+1

не использовал пользовательский адаптер ... здание один сейчас .. можно понять это отсюда .. спасибо !!! – trickedoutdavid

1

вы должны использовать собственный адаптер для этого, и в пользовательском использовании адаптера findViewById для поиска imageviews и настройки слушателя

это хороший учебник: http://www.vogella.com/articles/AndroidListView/article.html

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