안드로이드 스튜디오

[안드로이드 스튜디오] 앱에서 글 쓰기 / 리스트생성 , 내가 쓴 글 리스트에 추가, 리스트 삭제 / listView , EditText 사용 글자 예시 , hint

yangcotton 2023. 8. 30. 15:58

일부분 소스는 아래 나올테지만 전체소스를 보고싶다면~

https://yangcottondev.tistory.com/36

 

[안드로이드 스튜디오] GCS 앱 만들기 - 전체소스

MainActivity.java package com.example.gcs; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.view.Layo

yangcottondev.tistory.com

 

1. EditText 사용하여 앱에서 글 쓰기

 

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="20dp"
    android:id="@+id/addTitle"
    android:hint="대분류 제목을 적으시오"
    android:focusable="true"
    android:focusableInTouchMode="true"
    />

일단 xml은 이렇다.

hint 기능을 사용하면 예시를 줄 수 있다.
글을 쓰면 예시인 hint가 사라지고 또 글을 지워 공백인 상태면 hint 가 다시 나타난다.

//대분류 제목
        EditText addTitle = (EditText) findViewById(R.id.addTitle);
        String text = addTitle.getText().toString();        // EditText에 입력된 문자열값을 얻기

 

2. 리스트생성 , 내가 쓴 글 리스트에 추가, 리스트 삭제

 

이번엔 앱에서 글을 쓰고 그걸 리스트에 넣어보겠다.

 

소스가 길어서 접어 놓겠다. 더보기 확인!

 

더보기
package com.example.gcs;


import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;

public class AddNewList extends AppCompatActivity {
    TextView content;
    ArrayList<String> items;
    ArrayAdapter<String> adapter;
    ListView listView;

    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.add_new_list);

        content = (TextView) findViewById(R.id.content);
        //데이터 준비
        items = new ArrayList<String>();

        // 어댑터 생성
        adapter = new ArrayAdapter<String>(AddNewList.this,
                android.R.layout.simple_list_item_single_choice, items);

        // 어댑터 설정
        listView = (ListView) findViewById(R.id.listView);
        listView.setAdapter(adapter);
        listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); // 하나의 항목만 선택할 수 있도록 설정
        
        /**
         * ADD, DELETE 버튼 클릭 시 실행되는 메소드
         */

        Button btnAdd = (Button) findViewById(R.id.btnAdd);
        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                EditText ed = (EditText) findViewById(R.id.newitem);
                String text = ed.getText().toString();        // EditText에 입력된 문자열값을 얻기
                if (!text.isEmpty()) {                        // 입력된 text 문자열이 비어있지 않으면
                    items.add(text);                          // items 리스트에 입력된 문자열 추가
                    ed.setText("");                           // EditText 입력란 초기화
                    adapter.notifyDataSetChanged();           // 리스트 목록 갱신
                }
            }
        });

        Button btnDelete = (Button) findViewById(R.id.btnDelete);
        btnDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int pos = listView.getCheckedItemPosition(); // 현재 선택된 항목의 첨자(위치값) 얻기
                if (pos != ListView.INVALID_POSITION) {      // 선택된 항목이 있으면
                    items.remove(pos);                       // items 리스트에서 해당 위치의 요소 제거
                    listView.clearChoices();                 // 선택 해제
                    adapter.notifyDataSetChanged();
                    // 어답터와 연결된 원본데이터의 값이 변경된을 알려 리스트뷰 목록 갱신
                }
            }
        });

    }
}

 

보면 adpater 가 사용된다.

listview 는 단순히 목록만 보여줄 수 있기 때문에

어텁터를 사용하여 기능을 구현한다.

더보기

이건 시간이나서 따로 정리하면 글을 수정하여 여기에 링크를 달겠다.

 

추가로 xml은

더보기
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".AddNewList">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
      
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="페이지 제목"
            android:textSize="40dp"
            android:id="@+id/content"/>
    </LinearLayout>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="소분류를 추가 하세요"
        android:textSize="20dp"
        android:id="@+id/content2"/>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:id="@+id/newitem"
            android:focusable="true"
            android:focusableInTouchMode="true"
            />
        <Button
            android:text="추가"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:id="@+id/btnAdd"
            />

        <Button
            android:text="삭제"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:id="@+id/btnDelete"
            />
    </LinearLayout>
    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1" />

</LinearLayout>

 

 

**내가 쓴 방식은 리스트에서 1개만 값을받고 1개의 리스트만 추가하는것인데

제목, 본문 이렇게 2개의 값을 받아 2개씩 추가하는것도있다.

더 나아가 사진도 같이 받을 수 있다는 점!!