单击 TextView 时显示 ArrayAdapter
Show ArrayAdapter when TextView is clicked
众所周知,我们可以将 ArrayAdapter 设置为 Spinner 或 ListView 以将数据填充到这些视图中。
在我的应用程序中有 testView。我想在单击 TextView 时将下方的 arrayAdapter 的项目填充到 TestView。
请查找图片:-
在图片中,如果用户点击 4 Selected,则会显示列表。
如果用户点击屏幕的其他部分,列表将消失。
在我的应用程序中,用户将能够发送消息。在发送消息之前,用户需要 select 他想从列表中向其发送消息的人(如上图所示)。
假设他 select 5 人然后在顶部会显示“5 Selected”,当他点击“5 Selected”时我需要在顶部显示 selected person屏幕,当用户点击屏幕上的其他地方时,列表将消失。
可扩展列表视图的问题是当它展开时会在同一屏幕上展开,但我希望它会在屏幕顶部展开,这样不会干扰其他视图,例如微调器下拉列表。
将当前展开的组位置存储在一个变量中。在 onGroupExpanded 中执行以下操作。
private int lastExpandedPosition = -1;
私有 ExpandableListView lv; //你的可扩展列表视图
...
lv.setOnGroupExpandListener(新的 OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
if (lastExpandedPosition != -1
&& groupPosition != lastExpandedPosition) {
lv.collapseGroup(lastExpandedPosition);
}
lastExpandedPosition = groupPosition;
}
});
spinner.setOnItemSelectedListener(新AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent,View view, int i, long l) {
String dis_name = spinner.getSelectedItem().toString();
if (i>=1) {
Dis_list.remove(" ");
}
}
});
当下拉列表消失时再次 Dis_list.set(0," ")
以上都不适合我。无论如何感谢你们的时间。
我通过使用 AlerDialog 实现了这一点,并将其放在顶部。
public void showSelectedPeople(View v) {
ArrayList<String> aListNoOfSelection = new ArrayList<String>();
if (rows != null) {
for (PostOptionsRow postOptionsRow : rows) {
if (postOptionsRow.getType() == PostOptionsRow.TYPE_GROUP
&& !postOptionsRow.hasChildren()
&& postOptionsRow.isSelected()) {
aListNoOfSelection.add(postOptionsRow.getTitle());
} else if (postOptionsRow.getType() == PostOptionsRow.TYPE_GROUP
&& postOptionsRow.hasChildren()
&& postOptionsRow.getChildren() != null) {
for (PostOptionsRow postOptionsRowInner : postOptionsRow
.getChildren()) {
if (postOptionsRowInner.isSelected()) {
aListNoOfSelection.add(postOptionsRowInner
.getTitle());
}
}
}
}
}
aAdapterNoOfSelection = new NoOfSelectionAdapter(context, 0, aListNoOfSelection);
if (aListNoOfSelection.size() == 0) {
Toast.makeText(context, "Please select a recipient for this post.", Toast.LENGTH_SHORT).show();
return;
}
ListView listView = new ListView(this);
listView.setBackgroundColor(Color.WHITE);
listView.setAdapter(aAdapterNoOfSelection);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(listView);
AlertDialog dialog = builder.create();
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
WindowManager.LayoutParams wmlp = dialog.getWindow().getAttributes();
wmlp.gravity = Gravity.TOP | Gravity.LEFT;
wmlp.x = 55; // x position
wmlp.y = 25; // y position
dialog.show();
}
众所周知,我们可以将 ArrayAdapter 设置为 Spinner 或 ListView 以将数据填充到这些视图中。
在我的应用程序中有 testView。我想在单击 TextView 时将下方的 arrayAdapter 的项目填充到 TestView。
请查找图片:- 在图片中,如果用户点击 4 Selected,则会显示列表。
如果用户点击屏幕的其他部分,列表将消失。
在我的应用程序中,用户将能够发送消息。在发送消息之前,用户需要 select 他想从列表中向其发送消息的人(如上图所示)。
假设他 select 5 人然后在顶部会显示“5 Selected”,当他点击“5 Selected”时我需要在顶部显示 selected person屏幕,当用户点击屏幕上的其他地方时,列表将消失。
可扩展列表视图的问题是当它展开时会在同一屏幕上展开,但我希望它会在屏幕顶部展开,这样不会干扰其他视图,例如微调器下拉列表。
将当前展开的组位置存储在一个变量中。在 onGroupExpanded 中执行以下操作。
private int lastExpandedPosition = -1; 私有 ExpandableListView lv; //你的可扩展列表视图 ...
lv.setOnGroupExpandListener(新的 OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
if (lastExpandedPosition != -1
&& groupPosition != lastExpandedPosition) {
lv.collapseGroup(lastExpandedPosition);
}
lastExpandedPosition = groupPosition;
}
});
spinner.setOnItemSelectedListener(新AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent,View view, int i, long l) {
String dis_name = spinner.getSelectedItem().toString();
if (i>=1) {
Dis_list.remove(" ");
}
}
});
当下拉列表消失时再次 Dis_list.set(0," ")
以上都不适合我。无论如何感谢你们的时间。
我通过使用 AlerDialog 实现了这一点,并将其放在顶部。
public void showSelectedPeople(View v) {
ArrayList<String> aListNoOfSelection = new ArrayList<String>();
if (rows != null) {
for (PostOptionsRow postOptionsRow : rows) {
if (postOptionsRow.getType() == PostOptionsRow.TYPE_GROUP
&& !postOptionsRow.hasChildren()
&& postOptionsRow.isSelected()) {
aListNoOfSelection.add(postOptionsRow.getTitle());
} else if (postOptionsRow.getType() == PostOptionsRow.TYPE_GROUP
&& postOptionsRow.hasChildren()
&& postOptionsRow.getChildren() != null) {
for (PostOptionsRow postOptionsRowInner : postOptionsRow
.getChildren()) {
if (postOptionsRowInner.isSelected()) {
aListNoOfSelection.add(postOptionsRowInner
.getTitle());
}
}
}
}
}
aAdapterNoOfSelection = new NoOfSelectionAdapter(context, 0, aListNoOfSelection);
if (aListNoOfSelection.size() == 0) {
Toast.makeText(context, "Please select a recipient for this post.", Toast.LENGTH_SHORT).show();
return;
}
ListView listView = new ListView(this);
listView.setBackgroundColor(Color.WHITE);
listView.setAdapter(aAdapterNoOfSelection);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(listView);
AlertDialog dialog = builder.create();
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
WindowManager.LayoutParams wmlp = dialog.getWindow().getAttributes();
wmlp.gravity = Gravity.TOP | Gravity.LEFT;
wmlp.x = 55; // x position
wmlp.y = 25; // y position
dialog.show();
}