Listview一次添加一项

时间:2018-09-11 07:29:51

标签: android listview arraylist adapter

我的主要活动中有一个列表视图和一个按钮,还有三个布局资源文件(right.xml,mid.xml和left.xml [它们是相对布局])。

我要创建一个arrayList(带有字符串和可绘制的(图像)),每次我按main.xml中的按钮时,arrayList的第一个内容将出现在屏幕的底部(左,中或右) ->取决于arrayList的顺序),当我再次单击时,下一项(字符串或可绘制对象)将出现在其下方,将其向上推动。

更新

我制作了一个模型和一个适配器

这是模特

public class ModelC1 {

public String C1Name;
public String C1Text;
public int id;
public boolean isSend;

public ModelC1(String C1Name, String C1Text, int id, boolean isSend){
    this.id = id;
    this.C1Name = C1Name;
    this.C1Text = C1Text;
    this.isSend = isSend;
}

public int getId(){
    return id;
}

public void setId(int id){
    this.id = id;
}

public String getC1Name() {
    return C1Name;
}

public void setC1Name(String C1Name){
    this.C1Name = C1Name;
}

public String getC1Text() {
    return C1Text;
}

public void setC1Text (String C1Text){
    this.C1Text = C1Text ;
}

public boolean isSend() {
    return isSend;
}

public void setIsSend(boolean send){
    isSend = send;
}

这是适配器

public class AdapterC1 extends BaseAdapter {

private List<ModelC1> listChat;
private LayoutInflater inflater;
private Context context;

public AdapterC1(List<ModelC1> listChat, Context context){
    this.listChat = listChat;
    this.context = context;
    inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    return listChat.size();
}

@Override
public Object getItem(int i) {
    return listChat.get(i);
}

@Override
public long getItemId(int i) {
    return i;
}

@Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
    View vi = convertView;
    if(convertView == null ){
        if(listChat.get(i).isSend() == 0)
            vi=inflater.inflate(R.layout.list_send,null);
        else if ((listChat.get(i).isSend() == 1))
            vi=inflater.inflate(R.layout.list_recv,null);
        else if ((listChat.get(i).isSend() == 2))
            vi=inflater.inflate(R.layout.list_mid,null);

    }else{
        if(listChat.get(i).isSend() == 0)
            vi=inflater.inflate(R.layout.list_send,null);
        else if ((listChat.get(i).isSend() == 1))
            vi=inflater.inflate(R.layout.list_recv,null);
        else if ((listChat.get(i).isSend() == 2))
            vi=inflater.inflate(R.layout.list_mid,null);
    }

    if(listChat.get(i).isSend() !=0 || listChat.get(i).isSend() !=1 ||  listChat.get(i).isSend() !=2 ){
        BubbleTextView bubbleTextView = (BubbleTextView) vi.findViewById(R.id.bubbleChat);
        if(bubbleTextView != null)
            bubbleTextView.setText(listChat.get(i).C1Text);
        TextView nameTextView = (TextView) vi.findViewById(R.id.nameChat);
        if(nameTextView != null)
            nameTextView.setText(listChat.get(i).C1Name);
    }else{
        vi=inflater.inflate(R.layout.list_mid,null);
        BubbleTextView bubbleTextView = (BubbleTextView) vi.findViewById(R.id.bubbleChat);
        bubbleTextView.setText("THE END");
    }

    return vi;
}

这是活动

公共类Chat1扩展了AppCompatActivity {     私有静态最终String TAG =“ Chat1”;

private AdapterC1 adapter;
private List<ModelC1> listChat = new ArrayList<>();
private int count = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_chat1);

    RecyclerView chatContent1 = findViewById(R.id.chatContent1);
}

private ModelC1 setUpMessage(){
    Log.d(TAG, "setUpMessage: Exec");
    return();
}

///OnClick of the button in the activity_chat1.xml
public void nextClicked1(View view) {
    Log.d(TAG, "nextClicked: Is Clicked");

    ///After the limit of the arraylist is reached
    final int limit = 40;
    if(count == limit){
        Log.d(TAG, "nextClicked: Limit Reached");

        Intent i = new Intent(Chat1.this, MainActivity.class);
        startActivity(i);

    }else{
        ///Call the list
        loadList(null);
    }
}

///Load the list of arrays?
public void loadList(View view){
    ModelC1 chat = setUpMessage();
    listChat.add(chat);
    ///The ID of the recycleview in the activity_chat1.xml
    final RecyclerView recyclerview = findViewById(R.id.chatContent1);
    ///The adapter
    final AdapterC1 adapter = new AdapterC1(listChat, this);
    ///Make the recyclerview always scroll

    ///the adapter
         ///recyclerview.setAdapter(adapter);
}

我现在的问题是如何创建ArrayList(包含字符串和可绘制对象)以及如何链接ArrayList以使其在单击按钮时一个接一个地显示?

对于ArrayList,这样的东西会起作用吗?

private List<List<String>> textChat1 = new ArrayList<List<String>>();

ArrayList<String> textChat1 = new ArrayList<String>();
textChat1.add("This is message 1");
textChat1.add("This is message 2");
textChat1.add("This is message 2");
addresses.add(textChat1);

如何添加图像以及如何说出哪些字符串使布局(左,中或右)膨胀?

1 个答案:

答案 0 :(得分:1)

您可以这样操作:在您的Adapter的{​​{1}}方法中,

getView

这可以完成您的工作,但是,我建议您使用@Override public View getView(int position, View convertView, ViewGroup container) { if (convertView == null) { if (position == 1) { convertView = getLayoutInflater().inflate(R.layout.left, container, false); } else if (position == 2) { convertView = getLayoutInflater().inflate(R.layout.mid, container, false); } else { convertView = getLayoutInflater().inflate(R.layout.right, container, false); } } //your code here return convertView; },因为它在外观和内存管理方面更高效,更好。