我有一个类似的数组:String [] values = {“val1”,“val2”,“val3”}
现在我将这些值放入Gridview中。 到目前为止一切都很好。
但是现在我正在尝试向此gridview添加一个特定值。这应该是我的Gridview的第一个值,不应该影响我的String []中其他值的位置。
from tkinter import *
root = Tk()
username = "abc"
password = "cba"
username_entry = Entry(root)
username_entry.pack()
password_entry = Entry(root, show='*')
password_entry.pack()
def trylogin():
if username == username_entry.get() and password == password_entry.get():
'''Illustrate input and print.'''
applicant = input("Enter the applicant's name: ")
interviewer = input("Enter the interviewer's name: ")
time = input("Enter the appointment time: ")
print(interviewer, "will interview", applicant, "at", time)
# file-output.py
f = open('helloworld.txt','w')
f.write(interviewer)
f.write(" will Interview ")
f.write( applicant)
f.write(" at ")
f.write( time)
f.close()
else:
print("Wrong")
button = Button(root, text="Enter", command = trylogin)
button.pack()
root.mainloop()
在这个函数中我设置了值! 我也尝试用布尔值检查,如果这是第一个元素,但这会影响位置。在这种情况下,它只会覆盖“val1”
答案 0 :(得分:1)
执行此操作的最佳方法是使用单独的数组(甚至ArrayList<String>
)作为适配器中的数据集。然后,您要在适配器中设置数据集,而不是仅提供values
,您可以执行以下操作:
String[] values = new String[] {"val1", "val2", "val3"};
ArrayList<String> dataset = new ArrayList<>();
dataset.add("back");
for(int i = 0; i < values.length; i++) {
dataset.add(values[i]);
}
//provide dataset to adapter
编辑#1
如果您在单个适配器中使用多种数据类型,我喜欢使用的方法是使用ArrayList<Object>
或您正在使用的其他一些常见的超类数据类型。如果您没有为按钮使用某个类,则可以为该按钮创建一个ViewModel类,允许BlackButtonViewModel
。
然后在设置数据集时,您可以执行以下操作:
List<Article> articles = ...
List<Object> dataset = new ArrayList<>();
dataset.add(new BlackButtonViewModel());
dataset.addAll(articles);
然后在您的适配器中创建视图时,您可以执行以下操作:
private enum ItemViewType {
BlackButton(1), Article(2);
private int id;
ItemViewType(int id) {
this.id = id;
}
public int getId() {
return id;
}
}
class BlackButtonViewHolder extends RecyclerView.ViewHolder {
BlackButtonViewHolder(View itemView) {
super(itemView);
}
}
class ArticleViewHolder extends RecyclerView.ViewHolder {
ArticleViewHolder(View itemView) {
super(itemView);
}
}
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType == ItemViewType.BlackButton.getId()) {
View v = ...inflate black button layout
return new BlackButtonViewHolder(v);
} else if (viewType == ItemViewType.Article.getId()) {
View v = ...inflate article layout
return new ArticleViewHolder(v);
}
}
@Override
public int getItemViewType(int position) {
Object item = dataset.get(position);
if(item instanceof BlackButtonViewModel) {
return ItemViewType.BlackButton.getId();
} else if(item instanceof Article) {
return ItemViewType.Article.getId();
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(holder instanceof BlackButtonViewHolder) {
BlackButtonViewModel model = (BlackButtonViewModel) dataset.get(position);
...set up black button view contents
} else if (holder instanceof ArticleViewHolder) {
Article article = (Article) dataset.get(position);
...set up article view contents
}
}