どうすればこのようなことができますか?
ナビゲーションドロワー内の2つの拡張可能なリストビュー。私はそれを私のxml内に追加しようとしましたが、運がありませんでした。スクロールバーが1つしかないビューが欲しいのですが、方法がわかりません。
これは私のナビゲーションドロワーレイアウトです。
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:background="@color/Bianco"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<LinearLayout
Android:layout_width="match_parent"
Android:orientation="vertical"
Android:layout_marginLeft="16dp"
Android:layout_marginTop="8dp"
Android:layout_marginBottom="8dp"
Android:layout_marginRight="16dp"
Android:layout_height="wrap_content">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textAppearance="?android:attr/textAppearanceLarge"
Android:text="@string/tvHomeActions"
Android:id="@+id/textView" />
<ExpandableListView
Android:id="@+id/elvHome"
Android:layout_width="match_parent"
Android:layout_marginTop="4dp"
Android:layout_height="300dp" />
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textAppearance="?android:attr/textAppearanceLarge"
Android:text="@string/tvHomeNavigations"
Android:layout_marginTop="16dp"
Android:id="@+id/textView2" />
<ExpandableListView
Android:id="@+id/elvNavigateTo"
Android:layout_width="match_parent"
Android:layout_height="200dp"
Android:layout_marginTop="4dp" />
</LinearLayout>
</ScrollView>
編集: Gmailアプリで引き出しのようなものを作成したい
やっと手に入れた!これは、セクションタイトルを持つExpandableListViewを取得するために作成したコードです。これで、タイトル、グループ、および子供用の3つのxmlカスタムレイアウトを簡単に作成できます。
それは私にとってはうまくいきますが、メモリの使用状況や速度などを最適化するためにコードの改善を受け入れます。
// ---------------------------------------------------------------------------------------------
// NAVIGATION DRAWER SIDE FRAGMENT
// ---------------------------------------------------------------------------------------------
private ExpandableListView mDrawerListView;
private List<Elemento> mainActions = new ArrayList<>();
private HashMap<Integer, List<String>> childActions = new HashMap<>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.frg_navigation_drawer, container, false);
assert v != null;
mDrawerListView = (ExpandableListView) v.findViewById(R.id.elvHome);
mDrawerListView.setGroupIndicator(null);
// add first title
mainActions.add(new TitoloGruppo("Good guys")); // 0
mainActions.add(new Azione("Admiral Ackbar", "Dagobah System")); // 1
mainActions.add(new Azione("Han Solo", "Millenium Falcon")); // 2
mainActions.add(new Azione("Yoda", "Dagobah System")); // 3
// add second title
mainActions.add(new TitoloGruppo("Bad guys")); // 4
mainActions.add(new Azione("Emperor", "Death star 2")); // 5
mainActions.add(new Azione("Jabba", "Tatooine")); // 6
mainActions.add(new Azione("Grand Moff Tarkin", "Death star 1")); // 7
// Adding child quotes to Ackbar
List<String> mainSubFive = new ArrayList<>();
mainSubFive.add("It's a trap!");
// Adding child quotes to Yoda
List<String> mainSubThree = new ArrayList<>();
mainSubThree.add("Do or do not; there is no try.");
mainSubThree.add("There is … another … Sky … walker.…");
mainSubThree.add("When 900 years old you reach, look as good you will not ehh.");
childActions.put(0, new ArrayList<String>());
childActions.put(1, mainSubFive);
childActions.put(2, new ArrayList<String>());
childActions.put(3, mainSubThree);
childActions.put(4, new ArrayList<String>());
childActions.put(5, new ArrayList<String>());
childActions.put(6, new ArrayList<String>());
mDrawerListView.setAdapter(new ExpandableAdapter(getActivity(), mainActions, childActions));
mDrawerListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
List<String> list = childActions.get(groupPosition);
if(list.size() > 0)
return false;
else
Toast.makeText(getActivity(), ""+ ((Azione) mainActions.get(groupPosition)).getSubtitle(), Toast.LENGTH_LONG).show();
return false;
}
});
mDrawerListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
List<String> list = childActions.get(groupPosition);
Toast.makeText(getActivity(), "" + list.get(childPosition).toString(), Toast.LENGTH_LONG).show();
return false;
}
});
return v;
}
// ---------------------------------------------------------------------------------------------
// INTERNAL CLASS
// ---------------------------------------------------------------------------------------------
protected class ExpandableAdapter extends BaseExpandableListAdapter {
private Context context;
private List<Elemento> mainElements;
private HashMap<Integer, List<String>> childElements;
private LayoutInflater vi;
public ExpandableAdapter(Context context, List<Elemento> mainElements, HashMap<Integer, List<String>> childElements) {
this.context = context;
this.mainElements = mainElements;
this.childElements = childElements;
vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getGroupCount() {
return this.mainElements.size();
}
@Override
public int getChildrenCount(int groupPosition) {
if(this.childElements.get(groupPosition) == null)
return 0;
return this.childElements.get(groupPosition).size();
}
@Override
public Object getGroup(int groupPosition) {
return this.mainElements.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return this.childElements.get(groupPosition).get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
View v = convertView;
final Elemento i = mainElements.get(groupPosition);
if (i != null) {
if(i.isGroupSection()){
final TitoloGruppo si = (TitoloGruppo)i;
v = vi.inflate(Android.R.layout.simple_list_item_1, null);
v.setOnClickListener(null);
v.setOnLongClickListener(null);
v.setLongClickable(false);
final TextView sectionView = (TextView) v.findViewById(Android.R.id.text1);
sectionView.setTextColor(Color.parseColor("#FFC800"));
sectionView.setText(si.getTitle());
}else if(i.isAction()){
Azione ei = (Azione)i;
v = vi.inflate(Android.R.layout.simple_list_item_2, null);
final TextView title = (TextView)v.findViewById(Android.R.id.text1);
final TextView subtitle = (TextView)v.findViewById(Android.R.id.text2);
if (title != null)
title.setText(ei.title);
if(subtitle != null)
subtitle.setText("count: " + getChildrenCount(groupPosition));
}
}
return v;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
final String childText = (String) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(Android.R.layout.simple_list_item_1, null);
}
TextView txtListChild = (TextView) convertView.findViewById(Android.R.id.text1);
txtListChild.setText(childText);
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
public class TitoloGruppo implements Elemento {
private final String titolo;
public TitoloGruppo(String titolo) {
this.titolo = titolo;
}
public String getTitle(){
return titolo;
}
@Override
public boolean isGroupSection() {
return true;
}
@Override
public boolean isAction() {
return false;
}
}
protected interface Elemento {
public boolean isGroupSection();
public boolean isAction();
}
protected class Azione implements Elemento {
public final String title;
public final String subtitle;
public Azione(String title, String subtitle) {
this.title = title;
this.subtitle = subtitle;
}
public String getTitle() {
return this.title;
}
public String getSubtitle() {
return this.subtitle;
}
@Override
public boolean isGroupSection() {
return false;
}
@Override
public boolean isAction() {
return true;
}
}
Ps。皆さん、ありがとうございました
[〜#〜] fyi [〜#〜]qsnに表示したスクリーンショットにも、ピン留めまたはセクション化されたリストビューがあります。
ナビゲーションドロワーのExpandableListView:
ナビゲーションドロワーのExpandableListViewにこのコード DrawerLayoutTest を使用します。
更新:これはまさにあなたが探しているものです、これを試してみてください michenux navigation-drawer 、 Git
ロジック:
1> ExpandableListView + michenuxナビゲーションドロワードロワーをデザインと展開可能なリストビューに使用し、その内の「3」アイテムの数jgilfeltのAndroid-viewbadger libを使用します。
2>展開可能なリストビューのドロップダウンアイコンを有効にしないようにするには、リストビューのgetview(..)で遊んで、アイテムに子がない(配列またはarraylistがnull /空である)かを確認し、表示を非表示にします。バッジャー(ドロップダウンアイコン/バッジ)であるか、各アイテムの値に応じてリストビューアイテムのレイアウトを変更する例:リストの行に展開可能な子が含まれ、ビューバッジで異なるレイアウトをロードする!
クレジット:Michenaud、Jgilfelt