컨텍스트 메뉴 Context Menu
Context Menu
- 
화면에 배치된 뷰에 설정할 수 있는 메뉴 
- 
메뉴가 설정된 뷰를 길게 누르면 메뉴가 나타난다. 
registerForContext
- 
컨텍스트 메뉴를 등록하는 메서드 
- 
메서드의 매개 변수로 넣어준 뷰 객체에 메뉴가 설정된다. 
onCreateContextMenu
- 
뷰를 길게 누르면 호출되는 메서드 
- 
여기에서 메뉴를 구성한다. 
OnContextItemSelected
- •사용자가 메뉴를 선택했을 때 호출되는 메서드
Context Menu는 화면에 배치된 뷰를 길게 누르면 나타나는 메뉴이다.
package com.androidbasic.a21contextmenu;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.PagerAdapter;
import android.content.Context;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
    //뷰의 주소 값을 담을 참조변수
    TextView textView;
    ListView listView;
    //리스트뷰를 구성하기 위한 문자영 배열
    String[] data = {
            "항목1", "항목2", "항목3", "항목4", "항목5", "항목6", "항목7"
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //뷰의 주소값을 받아온다
        textView = (TextView) findViewById(R.id.textView);
        listView = (ListView) findViewById(R.id.list1);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
        listView.setAdapter(adapter);
        ListListener listListener = new ListListener();
        listView.setOnItemClickListener(listListener);
        //뷰에 컨텍스트 메뉴를 설정한다.
        registerForContextMenu(textView);
        registerForContextMenu(listView);
    }
    // 컨텍스트 메뉴가 설정되어 있는 뷰를 길제 누르면 컨텍스트 메뉴 구성을 위해서 호출하는 메서드
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        // 사용자가 길제 누르면 뷰의 주소값을 얻어온다
        int view_id = v.getId();
        switch (view_id) {
            case R.id.textView:
                menu.setHeaderTitle("텍스트 뷰의 컨텍스트 메뉴");
                inflater.inflate(R.menu.textview_menu, menu);
            case R.id.list1:
                //사용자가 길게 누른 항목의 인덱스를 가져온다.
                AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
                menu.setHeaderTitle("리스트뷰메뉴 : " + info.position);
                inflater.inflate(R.menu.listview_menu, menu);
        }
    }
    // 컨텍스트 메뉴의 항목을 터치 하면 호출되는 메서드
    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        //사용자가 선택한 메뉴의 항목의 id를 추출한다.
        int id = item.getItemId();
        //사용자가 길게 누른 리스트의 항목 인덱스를 가지고 있는 객체를 추출한다.
        ContextMenu.ContextMenuInfo info = item.getMenuInfo();
        int position = 0;
        if (info != null && info instanceof AdapterView.AdapterContextMenuInfo) {
            AdapterView.AdapterContextMenuInfo info2 = (AdapterView.AdapterContextMenuInfo) info;
            position = info2.position;
        }
        switch (id) {
            case R.id.text_item1:
                textView.setText("텍스트뷰의 메뉴1을 선탁하였습니다");
                break;
            case R.id.text_item2:
                textView.setText("텍스트뷰의 메뉴2를 선택하였습니다.");
                break;
            case R.id.list_item1:
                textView.setText("리스트뷰의 메뉴1을 선택하였습니다 : " + position);
                break;
            case R.id.list_item2:
                textView.setText("리스트뷰의 메뉴2를 선택하였습니다. : " + position);
                break;
        }
        return super.onContextItemSelected(item);
    }
    //리스트뷰의 리스너
    class ListListener implements AdapterView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            textView.setText("아이템 클릭  : " + position);
        }
    }
}
실습 Git
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Author And Source
                            
                            이 문제에 관하여(컨텍스트 메뉴 Context Menu), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://velog.io/@annette57/컨텍스트-메뉴-Context-Menu
                            
                            
                            
                                저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
화면에 배치된 뷰에 설정할 수 있는 메뉴
메뉴가 설정된 뷰를 길게 누르면 메뉴가 나타난다.
- 
컨텍스트 메뉴를 등록하는 메서드 
- 
메서드의 매개 변수로 넣어준 뷰 객체에 메뉴가 설정된다. 
onCreateContextMenu
- 
뷰를 길게 누르면 호출되는 메서드 
- 
여기에서 메뉴를 구성한다. 
OnContextItemSelected
- •사용자가 메뉴를 선택했을 때 호출되는 메서드
Context Menu는 화면에 배치된 뷰를 길게 누르면 나타나는 메뉴이다.
package com.androidbasic.a21contextmenu;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.PagerAdapter;
import android.content.Context;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
    //뷰의 주소 값을 담을 참조변수
    TextView textView;
    ListView listView;
    //리스트뷰를 구성하기 위한 문자영 배열
    String[] data = {
            "항목1", "항목2", "항목3", "항목4", "항목5", "항목6", "항목7"
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //뷰의 주소값을 받아온다
        textView = (TextView) findViewById(R.id.textView);
        listView = (ListView) findViewById(R.id.list1);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
        listView.setAdapter(adapter);
        ListListener listListener = new ListListener();
        listView.setOnItemClickListener(listListener);
        //뷰에 컨텍스트 메뉴를 설정한다.
        registerForContextMenu(textView);
        registerForContextMenu(listView);
    }
    // 컨텍스트 메뉴가 설정되어 있는 뷰를 길제 누르면 컨텍스트 메뉴 구성을 위해서 호출하는 메서드
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        // 사용자가 길제 누르면 뷰의 주소값을 얻어온다
        int view_id = v.getId();
        switch (view_id) {
            case R.id.textView:
                menu.setHeaderTitle("텍스트 뷰의 컨텍스트 메뉴");
                inflater.inflate(R.menu.textview_menu, menu);
            case R.id.list1:
                //사용자가 길게 누른 항목의 인덱스를 가져온다.
                AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
                menu.setHeaderTitle("리스트뷰메뉴 : " + info.position);
                inflater.inflate(R.menu.listview_menu, menu);
        }
    }
    // 컨텍스트 메뉴의 항목을 터치 하면 호출되는 메서드
    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        //사용자가 선택한 메뉴의 항목의 id를 추출한다.
        int id = item.getItemId();
        //사용자가 길게 누른 리스트의 항목 인덱스를 가지고 있는 객체를 추출한다.
        ContextMenu.ContextMenuInfo info = item.getMenuInfo();
        int position = 0;
        if (info != null && info instanceof AdapterView.AdapterContextMenuInfo) {
            AdapterView.AdapterContextMenuInfo info2 = (AdapterView.AdapterContextMenuInfo) info;
            position = info2.position;
        }
        switch (id) {
            case R.id.text_item1:
                textView.setText("텍스트뷰의 메뉴1을 선탁하였습니다");
                break;
            case R.id.text_item2:
                textView.setText("텍스트뷰의 메뉴2를 선택하였습니다.");
                break;
            case R.id.list_item1:
                textView.setText("리스트뷰의 메뉴1을 선택하였습니다 : " + position);
                break;
            case R.id.list_item2:
                textView.setText("리스트뷰의 메뉴2를 선택하였습니다. : " + position);
                break;
        }
        return super.onContextItemSelected(item);
    }
    //리스트뷰의 리스너
    class ListListener implements AdapterView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            textView.setText("아이템 클릭  : " + position);
        }
    }
}
실습 Git
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Author And Source
                            
                            이 문제에 관하여(컨텍스트 메뉴 Context Menu), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://velog.io/@annette57/컨텍스트-메뉴-Context-Menu
                            
                            
                            
                                저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
뷰를 길게 누르면 호출되는 메서드
여기에서 메뉴를 구성한다.
- •사용자가 메뉴를 선택했을 때 호출되는 메서드
Context Menu는 화면에 배치된 뷰를 길게 누르면 나타나는 메뉴이다.
package com.androidbasic.a21contextmenu;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.PagerAdapter;
import android.content.Context;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
    //뷰의 주소 값을 담을 참조변수
    TextView textView;
    ListView listView;
    //리스트뷰를 구성하기 위한 문자영 배열
    String[] data = {
            "항목1", "항목2", "항목3", "항목4", "항목5", "항목6", "항목7"
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //뷰의 주소값을 받아온다
        textView = (TextView) findViewById(R.id.textView);
        listView = (ListView) findViewById(R.id.list1);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
        listView.setAdapter(adapter);
        ListListener listListener = new ListListener();
        listView.setOnItemClickListener(listListener);
        //뷰에 컨텍스트 메뉴를 설정한다.
        registerForContextMenu(textView);
        registerForContextMenu(listView);
    }
    // 컨텍스트 메뉴가 설정되어 있는 뷰를 길제 누르면 컨텍스트 메뉴 구성을 위해서 호출하는 메서드
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        // 사용자가 길제 누르면 뷰의 주소값을 얻어온다
        int view_id = v.getId();
        switch (view_id) {
            case R.id.textView:
                menu.setHeaderTitle("텍스트 뷰의 컨텍스트 메뉴");
                inflater.inflate(R.menu.textview_menu, menu);
            case R.id.list1:
                //사용자가 길게 누른 항목의 인덱스를 가져온다.
                AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
                menu.setHeaderTitle("리스트뷰메뉴 : " + info.position);
                inflater.inflate(R.menu.listview_menu, menu);
        }
    }
    // 컨텍스트 메뉴의 항목을 터치 하면 호출되는 메서드
    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        //사용자가 선택한 메뉴의 항목의 id를 추출한다.
        int id = item.getItemId();
        //사용자가 길게 누른 리스트의 항목 인덱스를 가지고 있는 객체를 추출한다.
        ContextMenu.ContextMenuInfo info = item.getMenuInfo();
        int position = 0;
        if (info != null && info instanceof AdapterView.AdapterContextMenuInfo) {
            AdapterView.AdapterContextMenuInfo info2 = (AdapterView.AdapterContextMenuInfo) info;
            position = info2.position;
        }
        switch (id) {
            case R.id.text_item1:
                textView.setText("텍스트뷰의 메뉴1을 선탁하였습니다");
                break;
            case R.id.text_item2:
                textView.setText("텍스트뷰의 메뉴2를 선택하였습니다.");
                break;
            case R.id.list_item1:
                textView.setText("리스트뷰의 메뉴1을 선택하였습니다 : " + position);
                break;
            case R.id.list_item2:
                textView.setText("리스트뷰의 메뉴2를 선택하였습니다. : " + position);
                break;
        }
        return super.onContextItemSelected(item);
    }
    //리스트뷰의 리스너
    class ListListener implements AdapterView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            textView.setText("아이템 클릭  : " + position);
        }
    }
}
실습 Git
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Author And Source
                            
                            이 문제에 관하여(컨텍스트 메뉴 Context Menu), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://velog.io/@annette57/컨텍스트-메뉴-Context-Menu
                            
                            
                            
                                저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
package com.androidbasic.a21contextmenu;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.PagerAdapter;
import android.content.Context;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
    //뷰의 주소 값을 담을 참조변수
    TextView textView;
    ListView listView;
    //리스트뷰를 구성하기 위한 문자영 배열
    String[] data = {
            "항목1", "항목2", "항목3", "항목4", "항목5", "항목6", "항목7"
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //뷰의 주소값을 받아온다
        textView = (TextView) findViewById(R.id.textView);
        listView = (ListView) findViewById(R.id.list1);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
        listView.setAdapter(adapter);
        ListListener listListener = new ListListener();
        listView.setOnItemClickListener(listListener);
        //뷰에 컨텍스트 메뉴를 설정한다.
        registerForContextMenu(textView);
        registerForContextMenu(listView);
    }
    // 컨텍스트 메뉴가 설정되어 있는 뷰를 길제 누르면 컨텍스트 메뉴 구성을 위해서 호출하는 메서드
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        // 사용자가 길제 누르면 뷰의 주소값을 얻어온다
        int view_id = v.getId();
        switch (view_id) {
            case R.id.textView:
                menu.setHeaderTitle("텍스트 뷰의 컨텍스트 메뉴");
                inflater.inflate(R.menu.textview_menu, menu);
            case R.id.list1:
                //사용자가 길게 누른 항목의 인덱스를 가져온다.
                AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
                menu.setHeaderTitle("리스트뷰메뉴 : " + info.position);
                inflater.inflate(R.menu.listview_menu, menu);
        }
    }
    // 컨텍스트 메뉴의 항목을 터치 하면 호출되는 메서드
    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        //사용자가 선택한 메뉴의 항목의 id를 추출한다.
        int id = item.getItemId();
        //사용자가 길게 누른 리스트의 항목 인덱스를 가지고 있는 객체를 추출한다.
        ContextMenu.ContextMenuInfo info = item.getMenuInfo();
        int position = 0;
        if (info != null && info instanceof AdapterView.AdapterContextMenuInfo) {
            AdapterView.AdapterContextMenuInfo info2 = (AdapterView.AdapterContextMenuInfo) info;
            position = info2.position;
        }
        switch (id) {
            case R.id.text_item1:
                textView.setText("텍스트뷰의 메뉴1을 선탁하였습니다");
                break;
            case R.id.text_item2:
                textView.setText("텍스트뷰의 메뉴2를 선택하였습니다.");
                break;
            case R.id.list_item1:
                textView.setText("리스트뷰의 메뉴1을 선택하였습니다 : " + position);
                break;
            case R.id.list_item2:
                textView.setText("리스트뷰의 메뉴2를 선택하였습니다. : " + position);
                break;
        }
        return super.onContextItemSelected(item);
    }
    //리스트뷰의 리스너
    class ListListener implements AdapterView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            textView.setText("아이템 클릭  : " + position);
        }
    }
}Author And Source
이 문제에 관하여(컨텍스트 메뉴 Context Menu), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@annette57/컨텍스트-메뉴-Context-Menu저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)