2017-12-08 6 views
-3

私はアンドロイドスタジオでプログラミングを学んでいます。私はクリック可能なリストビューを作りたいと思います。アイテムの1つがクリックされると、そのクリックされたリストアイテムの下に他のリストが表示され、他はすべてプッシュダウンされます。その目的のためのレイアウトアイテムがあるのか​​、それとも自分で作らなければならないのでしょうか?ありがとうございました。listviewの中でlistviewを作成するには?

+0

'android expandablelistview'を検索してください –

答えて

0

あなたはそれがどのように動作するか、ここで拡張可能なリストビューを作成する必要があると:

あなたactivity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" 
tools:context=".MainActivity"> 

<ExpandableListView 
    android:id="@+id/myExpandableListView" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:indicatorLeft="?android:attr/expandableListPreferredItemIndicatorLeft" 
    android:divider="@android:color/white" 
    android:dividerHeight="1dp" /> 

その後、一覧のグループまたは各拡張可能なリストのヘッダー:

list_header_group.xml 

     <?xml version="1.0" encoding="utf-8"?> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     <TextView 
      android:id="@+id/listTitle" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft" 
      android:textColor="@android:color/blue" 
      android:paddingTop="10dp" 
      android:paddingBottom="8dp" /> 
    </LinearLayout> 

次に、各グループヘッダーの下の子アイテム:

list_item_child.xml 


    <?xml version="1.0" encoding="utf-8"?> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
     <TextView 
      android:id="@+id/expandedListItem" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft" 
      android:paddingTop="10dp" 
      android:paddingBottom="10dp" /> 
    </LinearLayout> 

あなたのデータのinitは、さまざまなJavaクラスに入れたりする方法としてそれを作るの天気のようにする必要があります:

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

public class ExpandableListDataInit { 
    public static HashMap<String, List<String>> getData() { 
     HashMap<String, List<String>> expandableList = new HashMap<String, List<String>>(); 

     List<String> Books = new ArrayList<String>(); 
     books.add("Programming"); 
     books.add("Stories"); 
     books.add("Kids"); 
     books.add("Fiction"); 

     List<String> movies= new ArrayList<String>(); 
     movies.add("Action"); 
     movies.add("Cartoon"); 
     movies.add("Others"); 

     List<String> toys = new ArrayList<String>(); 
     toys.add("Brand 1"); 
     toys.add("brand 2"); 

     expandableList.put("books", books); 
     expandableList.put("mvies", movies); 
     expandableList.put("toys", toys); 
     return expandableList; 
    } 
} 

アダプタは次のようになります。

CustomExpAdapter.java

import java.util.HashMap; 
import java.util.List; 
import android.content.Context; 
import android.graphics.Typeface; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseExpandableListAdapter; 
import android.widget.TextView; 

public class CustomExpAdapter extends BaseExpandableListAdapter { 

    private Context context; 
    private List<String> expandableListTitle; 
    private HashMap<String, List<String>> expandableListDetail; 

    public CustomExpAdapter(Context context, List<String> expandableListTitle, 
             HashMap<String, List<String>> expandableListDetail) { 
     this.context = context; 
     this.expandableListTitle = expandableListTitle; 
     this.expandableListDetail = expandableListDetail; 
    } 

    @Override 
    public Object getChild(int listPosition, int expandedListPosition) { 
     return this.expandableListDetail.get(this.expandableListTitle.get(listPosition)) 
       .get(expandedListPosition); 
    } 

    @Override 
    public long getChildId(int listPosition, int expandedListPosition) { 
     return expandedListPosition; 
    } 

    @Override 
    public View getChildView(int listPosition, final int expandedListPosition, 
          boolean isLastChild, View convertView, ViewGroup parent) { 
     final String expandedListText = (String) getChild(listPosition, expandedListPosition); 
     if (convertView == null) { 
      LayoutInflater layoutInflater = (LayoutInflater) this.context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = layoutInflater.inflate(R.layout.list_item, null); 
     } 
     TextView expandedListTextView = (TextView) convertView 
       .findViewById(R.id.expandedListItem); 
     expandedListTextView.setText(expandedListText); 
     return convertView; 
    } 

    @Override 
    public int getChildrenCount(int listPosition) { 
     return this.expandableListDetail.get(this.expandableListTitle.get(listPosition)) 
       .size(); 
    } 

    @Override 
    public Object getGroup(int listPosition) { 
     return this.expandableListTitle.get(listPosition); 
    } 

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

    @Override 
    public long getGroupId(int listPosition) { 
     return listPosition; 
    } 

    @Override 
    public View getGroupView(int listPosition, boolean isExpanded, 
          View convertView, ViewGroup parent) { 
     String listTitle = (String) getGroup(listPosition); 
     if (convertView == null) { 
      LayoutInflater layoutInflater = (LayoutInflater) this.context. 
        getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = layoutInflater.inflate(R.layout.list_group, null); 
     } 
     TextView listTitleTextView = (TextView) convertView 
       .findViewById(R.id.listTitle); 
     listTitleTextView.setTypeface(null, Typeface.BOLD); 
     listTitleTextView.setText(listTitle); 
     return convertView; 
    } 

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

    @Override 
    public boolean isChildSelectable(int listPosition, int expandedListPosition) { 
     return true; 
    } 
} 

MainActivity.javaはかなりのようになります。

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ExpandableListAdapter; 
import android.widget.ExpandableListView; 
import android.widget.Toast; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

public class MainActivity extends AppCompatActivity { 

    ExpandableListView expandableListView; 
    ExpandableListAdapter expandableListAdapter; 
    List<String> expandableListTitle; 
    HashMap<String, List<String>> expandableListDetail; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     expandableListView = (ExpandableListView) findViewById(R.id.myExpandableListView); 
     expandableListDetail = ExpandableListDataPump.getData(); 
     expandableListTitle = new ArrayList<String>(expandableListDetail.keySet()); 
     expandableListAdapter = new CustomExpandableListAdapter(this, expandableListTitle, expandableListDetail); 
     expandableListView.setAdapter(expandableListAdapter); 
     expandableListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() { 

      @Override 
      public void onGroupExpand(int groupPosition) { 
       Toast.makeText(getApplicationContext(), 
         expandableListTitle.get(groupPosition) + " List Expanded.", 
         Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     expandableListView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() { 

      @Override 
      public void onGroupCollapse(int groupPosition) { 
       Toast.makeText(getApplicationContext(), 
         expandableListTitle.get(groupPosition) + " List Collapsed.", 
         Toast.LENGTH_SHORT).show(); 

      } 
     }); 

     expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 
      @Override 
      public boolean onChildClick(ExpandableListView parent, View v, 
             int groupPosition, int childPosition, long id) { 
       Toast.makeText(
         getApplicationContext(), 
         expandableListTitle.get(groupPosition) 
           + " -> " 
           + expandableListDetail.get(
           expandableListTitle.get(groupPosition)).get(
           childPosition), Toast.LENGTH_SHORT 
       ).show(); 
       return false; 
      } 
     }); 
    } 

} 
関連する問題