как получить дочернюю ценность расширяемого списка в Android?

1

Я хочу знать, как получить дочернее значение расширяемого списка с помощью метода прослушивания setonItemclick. Мой код приведен ниже, но событие click не работает должным образом.

mExpandableListView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View v, int groupPosition,
                long id) {
            // TODO Auto-generated method stub
            int itemType = ExpandableListView.getPackedPositionType(groupPosition);
            Log.i("item type",""+itemType);
            if ( itemType == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
                  childPosition = ExpandableListView.getPackedPositionChild(id);
                  groupPosition = ExpandableListView.getPackedPositionGroup(id);
                  Log.i("child",""+ childPosition);
                  Log.i("child Group",""+ groupPosition);
              } else if(itemType == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
                  groupPosition = ExpandableListView.getPackedPositionGroup(id);
                  Log.i("Group",""+ groupPosition);
              } 
        }
    });
Теги:

3 ответа

3
Лучший ответ

Нет необходимости пытаться получить позиции вручную. Используйте определенные методы Android.

Это метод получения детской позиции и родительской позиции

public class MainActivity extends Activity {

    private ExpandableListView mExpandableListView;
    private List<GroupEntity> mGroupCollection;
     private int childPosition;
        private int groupPosition;
        boolean retVal;

        ExpandableListAdapter adapter;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mExpandableListView = (ExpandableListView) findViewById(R.id.expandableListView);
        prepareResource();
        initPage();


        /*mExpandableListView.setOnItemLongClickListener(new OnItemLongClickListener() {
            @Override
              public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                  int itemType = ExpandableListView.getPackedPositionType(id);

            if ( itemType == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
                      childPosition = ExpandableListView.getPackedPositionChild(id);
                      groupPosition = ExpandableListView.getPackedPositionGroup(id);
                      Log.i("child",""+ childPosition);
                      Log.i("child Group",""+ groupPosition);
                      //do your per-item callback here
                      return retVal; //true if we consumed the click, false if not
                  } else if(itemType == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
                      groupPosition = ExpandableListView.getPackedPositionGroup(id);
                      //do your per-group callback here
                      Log.i("Group",""+ groupPosition);
                      return retVal; //true if we consumed the click, false if not
                  } else {
                      // null item; we don't consume the click
                      return false;
                  }
            }
          });*/


    }


    private void prepareResource() {

        mGroupCollection = new ArrayList<GroupEntity>();

        for (int i = 1; i < 7; i++) {
            GroupEntity ge = new GroupEntity();
            if (i == 1)
                ge.Name = "Basic Info";
            if (i == 2)
                ge.Name = "Acadamic Background";
            if (i == 3)
                ge.Name = "Experience";
            if (i == 4)
                ge.Name = "Skill";
            if (i == 5)
                ge.Name = "Objective";
            if (i == 6)
                ge.Name = "Reference";
            for (int j = 1; j < 8; j++) {
                GroupItemEntity gi = ge.new GroupItemEntity();
                if (i == 1 && j == 1)
                    gi.Name = "FirstName";
                if (i == 1 && j == 2)
                    gi.Name = "MiddleName";
                if (i == 1 && j == 3)
                    gi.Name = "LastName";
                if (i == 1 && j == 4)
                    gi.Name = "Address";
                if (i == 1 && j == 5)
                    gi.Name = "Sex";
                if (i == 1 && j == 6)
                    gi.Name = "Merital stutas";
                if (i == 1 && j == 7)
                    gi.Name = "Date Of Birthday";
                ge.GroupItemCollection.add(gi);
            }
            mGroupCollection.add(ge);
        }

    }

    private void initPage() {
        mExpandableListView = (ExpandableListView) findViewById(R.id.expandableListView);
         adapter = new ExpandableListAdapter(this,
                mExpandableListView, mGroupCollection);
        mExpandableListView.setAdapter(adapter);
        registerForContextMenu(mExpandableListView);
    }

    public boolean onChildClick( ExpandableListView parent, View v, int groupPosition,int childPosition,long id) {
        System.out.println("Inside onChildClick at groupPosition = " + groupPosition +" Child clicked at position " + childPosition);

        return true;
    }

}
  • 0
    этот метод также не работает должным образом .. пожалуйста, приведите полный пример
  • 0
    какую запись вы хотите получить, используя список рассылки с этим примером
Показать ещё 7 комментариев
1

Чтобы получить значение дочернего элемента расширяемого списка, вызовите эту функцию

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);           
 ExpandList = (ExpandableListView) findViewById(R.id.exp_list);
            ExpListItems = SetStandardGroups();
            ExpAdapter = new ExpandListAdapter(MainActivity.this, ExpListItems);
            ExpandList.setAdapter(ExpAdapter);

            ExpandList.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {

                @Override
                public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
                    //get the cuurrnt clicked child object
                    Child child = (Child) ExpAdapter.getChild(groupPosition, childPosition);
                    //System.err.println("child clicked");
                    Intent intent = new Intent(MainActivity.this, jai_ganesh.class);
                    intent.putExtra("message", child.getName());// get the child  name and sent to next activity
                    startActivity(intent);
                   // Toast.makeText(getApplicationContext(), child.getName()+" child clicked", Toast.LENGTH_SHORT).show();
                    return true;
                }
            });
}

В приведенном выше коде вы получаете дочернее значение, создавая объект, потому что он имеет класс со многими значениями.

Child child = (Child) ExpAdapter.getChild(groupPosition, childPosition);

если ваш ребенок является только строковым или текстовым, в этом случае вы можете получить значение как

 final String selected = (String) expListAdapter.getChild(
 groupPosition, childPosition);

Надеюсь, это решит проблему.

0

Попробуй это...

mExpandableListView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View v, int groupPosition,
            long id) {
        // TODO Auto-generated method stub
        // add this code 
        String child = (String) listAdapter.getChild(groupPosition, childPosition);
        int itemType = ExpandableListView.getPackedPositionType(groupPosition);
        Log.i("item type",""+itemType);
        if ( itemType == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
              childPosition = ExpandableListView.getPackedPositionChild(id);
              groupPosition = ExpandableListView.getPackedPositionGroup(id);
              Log.i("child",""+ childPosition);
              Log.i("child Group",""+ groupPosition);
              // to get value of child
              Log.i("child Name",+ child.toString());
          } else if(itemType == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
              groupPosition = ExpandableListView.getPackedPositionGroup(id);
              Log.i("Group",""+ groupPosition);
          } 
    }
});

Надеюсь, это поможет..!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню