Listview добавить элемент по одному - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть вид списка и кнопка в моей основной деятельности и три файла ресурсов макета (right.xml, mid.xml и left.xml [Они являются относительным макетом]).

Я хочу создать arrayList (со строками и drawable (images)), и каждый раз, когда я нажимаю кнопку в main.xml, первое содержимое arrayList будет отображаться внизу экрана (либо слева,mid или right -> зависит от порядка 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 extends AppCompatActivity {private static final 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 голосов
/ 11 сентября 2018

Вы можете выполнять свою работу следующим образом: в вашем Adapter 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;
    }

Это сделает вашу работу, но я предлагаю вам использовать Recyclerview, потому что это более эффективно и лучше с точки зрения внешнего вида, а также управления памятью.

...