2013-11-01 4 views
11

मैं एंड्रॉइड प्रोग्रामिंग के लिए काफी नया हूं और पाठ्यक्रमों की एक सूची दिखाते हुए एक बुनियादी विस्तार योग्य सूचीदृश्य को लागू करने की कोशिश की, जिसे क्लिक करते समय कुछ अतिरिक्त विवरण दिखाना चाहिए। मुझे लगता है कि समस्या बहुत बुनियादी है क्योंकि मुझे किसी भी विचार में कुछ भी पसंद नहीं है, लेकिन मुझे अभी भी कोई समाधान नहीं मिला है, अन्य अधिकांश प्रश्न बहुत अधिक विशिष्ट हैं।एंड्रॉइड एक्सपेंडेबल लिस्ट व्यू विस्तृत नहीं है/क्लिक करने योग्य नहीं है

पहला भाग ठीक काम करता है (पाठ्यक्रमों की सूची प्रदर्शित करता है), समस्या यह है कि सूची क्लिक करने योग्य नहीं है, जिसका अर्थ है कि यह विस्तार नहीं होता है।

क्या अभी मैं निर्धारित किया है निम्नलिखित है:
1. getChildView कभी नहीं कहा जाता है (डिबगर ब्रेकप्वाइंट पर कभी नहीं बंद हो जाता है)
2. वहाँ बच्चों के लिए डेटा है यह एक ही डेटा है कि groupheading के लिए प्रयोग किया जाता है के रूप में जो ठीक काम करता है।

मैंने एक ग्रुपक्लिक लिस्टनर सेट करने का भी प्रयास किया है जिसे कभी नहीं कहा गया था, इसलिए मैंने इसे फिर से हटा दिया।

मेरी कोड:

समूह शीर्षक लेआउट:

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

एडाप्टर जावा:

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

} 

गतिविधि जावा:

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

} 

धन्यवाद अग्रिम में एक बहुत!

संपादित करें: मुझे इसे मौका मिला। ग्रुपहेडर के अंदर चेकबॉक्स फोकस करने योग्य था, सूची से दूर सभी क्लिक चुरा रहा था। इस समस्या को हल करने के लिए बस फोकस करने योग्य आपकी सूची में चेकबॉक्स/बटन की विशेषता को गलत पर सेट करें।

उत्तर

42

मुझे इसे मौका मिला। ग्रुपहेडर के अंदर चेकबॉक्स फोकस करने योग्य था, सूची से दूर सभी क्लिक चुरा रहा था। इस समस्या को हल करने के लिए बस अपनी सूची में चेकबॉक्स/बटन की फोकस करने योग्य विशेषता को या तो झूठी करने के लिए सेट करें:

चेकबॉक्स.सेट फोकसबल (झूठा); जावा में, या एंड्रॉयड: फ़ोकस करने योग्य = "false"

+3

शानदार !!!, आपने मेरा समय बचाया। –

+0

आपको धन्यवाद +1 :) – semih

+0

आपने अपना समय बचाया। धन्यवाद –

0

मैं एक ही मुद्दा है, लेकिन क्या मैं अपने माता पिता के दृश्य

android:descendantFocusability="blocksDescendants" 

के लिए नीचे लाइन जोड़ा गया है और यह मेरे लिए काम किया का सामना करना पड़ रहा था।

संबंधित मुद्दे