본문 바로가기

open coding

open coding- Listfragment - fragment로 ListView 사용하기.

반응형

 

<subFragment desing code>에서 list ID 설정

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".SubFragment">


    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@android:id/list"/>
</LinearLayout>


<!--.................................................................-->
<!-- 위에 추가한 아이디 설정 코딩 
    android:id="@android:id/list"-->

<subFragment>

package com.example.listfragment;

import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.ListFragment;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import org.w3c.dom.Text;


public class SubFragment extends ListFragment {

    TextView text1;

    //listview 구성할 data
    String [] list = {"data1","dat2","data3","data4","data5"};

    public SubFragment(){
        //Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        //view로 설정 및 view로 반환 : textView 이용할거라
        View view= inflater.inflate(R.layout.fragment_sub, container, false);

        //connect to subFragment xml id.
        text1 = view.findViewById(R.id.textView);

        //리스트뷰 설정- array define (context, layout, what data )
        MainActivity activity = (MainActivity)getActivity();    //적용할 context 추출
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(activity,android.R.layout.simple_list_item_1,list );

        setListAdapter(adapter);            //listView id가 자동인 @id/list 인경우디ㅏ.


        return view;
    }//finish


// listView 항목 클릭시 호출 - 버튼onclick 사용 불가(fragment니)
    @Override
    public void onListItemClick(@NonNull ListView l, @NonNull View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        text1.setText("선택한 data : "+list[position]);
    }
}

<MainActivity>

package com.example.listfragment;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    //call constructor
    SubFragment sub = new SubFragment();

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

        //앱 실행시, fragment 실행
        FragmentManager manager = getSupportFragmentManager();  //fragment 관리 객체추출
        FragmentTransaction trans = manager.beginTransaction(); //fragment 변경관리 객체 추출
        trans.replace(R.id.container, sub);     //MainActivity의 layout에 subFragment설정
        trans.commit();     //실행
    }
}