GridviewAdapter - 第一个元素个体(不在数组中)

时间:2018-02-12 22:32:37

标签: android gridview adapter

我有一个类似的数组: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”

1 个答案:

答案 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
    }
}