2013-11-01 7 views
11

Я довольно новичок в программировании на Android и попытался реализовать базовый расширяемый список, содержащий список курсов, которые должны показывать некоторые дополнительные данные при нажатии. я чувствую, что проблема очень проста, так как я не включаю ничего интересного в какие-либо из мнений, но я все еще не могу найти решение в Интернете, большинство других вопросов гораздо более конкретны.Android ExpandableListView не расширяется/не кликает

Первая часть работает отлично (отображает список курсов), проблема в том, что список не доступен для кликов, то есть он не расширяется.

, что я определил прямо сейчас заключается в следующем:
1. getChildView никогда не вызывается (отладчик никогда не останавливается на точке останова)
2. есть данные для детей, как это те же данные, что используется для groupheading который отлично работает.

Я также попытался установить onGroupClickListener, который никогда не вызывался, поэтому я удалил его снова.

мой код:

Группа товарной позиции раскладка:

<TextView 
     android:id="@+id/CourseName" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:gravity="bottom" 
     android:text="CourseName" 
     android:layout_weight="7" 
     android:layout_marginRight="25dp" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 


    <TextView 
     android:id="@+id/CourseDate" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:gravity="bottom" 
     android:layout_weight="3" 
     android:text="CourseDate" /> 


    <CheckBox 
     android:id="@+id/checkBox" 
     style="?android:attr/starStyle" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" /> 

</LinearLayout> 

child_row расположение:

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

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:text="Button" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_toRightOf="@+id/button1" 
     android:text="Button" /> 

    <TextView 
     android:id="@+id/phases" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:gravity="center" 
     android:layout_below="@+id/button1" 
     android:text="phases:" /> 

    <TextView 
     android:id="@+id/info" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_below="@+id/phases" 
     android:gravity="center" 
     android:text="information:" /> 

</RelativeLayout> 

активность раскладка:

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

    <TextView 
     android:id="@+id/sportName" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:gravity="center" 
     android:text="Sport Name" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:textSize="@dimen/profile_title" /> 

    <RatingBar 
     android:id="@+id/ratingBar" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:numStars="5" 
     android:stepSize="1" 
     android:layout_centerInParent="true" /> 

    <ExpandableListView 
     android:id="@+id/expandableListView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/sportName" > 
    </ExpandableListView> 

</RelativeLayout> 

адаптер Java:

package ch.unibe.unisportbern.views.details; 

import java.util.ArrayList; 

import com.example.unisportbern.R; 

import ch.unibe.unisportbern.support.Course; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseExpandableListAdapter; 
import android.widget.TextView; 

public class SportsAdapter extends BaseExpandableListAdapter { 
    private Context context; 
    private ArrayList<Course> courseList; 



    public SportsAdapter(Context context, ArrayList<Course> courseList) { 
     this.context = context; 
     this.courseList = courseList; 
    } 



    @Override 
    public Object getChild(int index, int stub) { 
     return courseList.get(index); 
    } 

    @Override 
    public long getChildId(int index, int stub) { 
     return stub; 
    } 

    @Override 
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 

     if (convertView == null){ 
      LayoutInflater inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       convertView = inflater.inflate(R.layout.child_row, null); 
     } 

     TextView phases = (TextView) convertView.findViewById(R.id.phases); 
     TextView info = (TextView) convertView.findViewById(R.id.info); 

     phases.setText("phases:\n" + courseList.get(groupPosition).getPhases()); 
     info.setText(courseList.get(groupPosition).getInformation()); 

     return convertView; 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) { 
     return 1; 
    } 

    @Override 
    public Object getGroup(int groupPosition) { 
     return courseList.get(groupPosition); 
    } 

    @Override 
    public int getGroupCount() { 
     return courseList.size(); 
    } 

    @Override 
    public long getGroupId(int groupPosition) { 
     return courseList.get(groupPosition).getId(); 
    } 

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 

     if (convertView == null) { 
       LayoutInflater inf = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       convertView = inf.inflate(R.layout.group_heading, null); 
       } 

     TextView courseName = (TextView) convertView.findViewById(R.id.CourseName); 
     TextView courseDate = (TextView) convertView.findViewById(R.id.CourseDate); 

     courseName.setText(courseList.get(groupPosition).getName()); 
     courseDate.setText(courseList.get(groupPosition).getDay() + courseList.get(groupPosition).getTime()); 

     return convertView; 
    } 

    @Override 
    public boolean hasStableIds() { 
     return true; 
    } 

    @Override 
    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     return true; 
    } 

} 

активность Java:

package ch.unibe.unisportbern.views.details; 

import java.util.ArrayList; 

import com.example.unisportbern.R; 

import ch.unibe.unisportbern.support.Course; 
import ch.unibe.unisportbern.support.DBMethodes; 
import ch.unibe.unisportbern.support.Sport; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.ExpandableListView; 

public class DActivity extends Activity{ 


    public final static String NAME = "SportName"; 
    public final static String ID = "SportID"; 

    private Sport sport; 
    private ArrayList<Course> courses; 
    private SportsAdapter sportsadapter; 

    private ExpandableListView myList; 

    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 

     getSport(); 
     getCourses(); 

     setContentView(R.layout.details_layout); 

     myList = (ExpandableListView) findViewById(R.id.expandableListView); 
     sportsadapter = new SportsAdapter(this, courses); 
     myList.setAdapter(sportsadapter); 
    } 

    private void getCourses() { 
     DBMethodes dbMethodes = new DBMethodes(this); 
     try { 
      courses = dbMethodes.getAllCourses(sport); 
     } catch (Exception e) { 
     } 
    } 

    private void getSport() { 
     Intent intent = this.getIntent(); 
     int id = intent.getIntExtra(ID, 0); 
     String name = intent.getStringExtra(NAME); 
     this.sport = new Sport(id, name); 
    } 

} 

Большое спасибо заранее!

EDIT: Я нашел это случайно. флажок внутри groupheader был сфокусирован, украл все клики вдали от списка. чтобы решить эту проблему, просто установите для атрибут с установленным флажком/в списке в false.

ответ

42

Я нашел его случайно. флажок внутри groupheader был сфокусирован, украл все клики вдали от списка. для решения этой проблемы просто установите для настраиваемого атрибута флажка/кнопки в вашем списке значение false:

checkbox.setFocusable (false); в Java или андроид: фокусируемый = «ложь»

+3

Фантастический !!!, вы спасли мое время. –

+0

Спасибо +1 :) – semih

+0

Вы спасли мое время. Спасибо –

0

я столкнулась с такой же вопрос, но то, что я добавил строку ниже на мой взгляд Родитель

android:descendantFocusability="blocksDescendants" 

и он работал для меня.

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