마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

listView 클릭해서 프래그먼트 띄웠는데 투명해서 액티비티의 버튼이 클릭됩니다.

0 추천

액티비티에 listview를 넣고 데이터를 불러오는데..

리스트뷰의 아이템을 클릭하면 프래그먼트가 뜨도록 했습니다.

근데 프래그먼트가 투명해서 그런지 액티비티와 겹쳐 보이네요.

검색해 보니 배경색을 주면 된다고 해서 흰색을 줬는데...

액티비티가 완전히 안보이는건 아니고 약간 흐리게 보이고요..

문제는 액티비티의 버튼이 클릭됩니다.

원래 이게 정상인건가요?

프래그먼트가 띄워졌을땐 액티비티가 클릭 안되게 하는 방법이 따로 있나요?

 

추가 질문인데요...

제가 계획한건 단어장 리스트가 보이고 개별 단어장을 누르면 영어 단어 리스트가 보이게 하려고 합니다.

이때 영어 단어 리스트를 프래그먼트에 보이도록 할려고 했는데 이걸 보통 웹페이지의 팝업창처럼 그냥 액티비티에 보이게 하는건가요? 책을 보고 하려니 이런 구성은 어떻게 하는지 잘 모르겠네요.

 

 

import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.loopj.android.http.RequestParams;

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.ArrayList;

import cz.msebera.android.httpclient.Header;

public class MainActivity extends AppCompatActivity implements FragmentWordsList.OnFragmentInteractionListener{

    @Override
    public void onFragmentInteraction(Uri uri) {

    }

    public static final String TAG = "MainActivity";

    ListView listView;
    WordsInfoAdapter wiAdapter;

    Handler handler = new Handler();

    ArrayList<WordsInfoItem> itemList;

    Button button;

    //fragment
    FragmentWordsList fragmentWordsList;

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

        listView = (ListView) findViewById(R.id.listView);

        wiAdapter = new WordsInfoAdapter();
        listView.setAdapter(wiAdapter);

        curPage = 1;
        getWordsInfo(curPage);        


        //아이템 클릭
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                WordsInfoItem curItem = (WordsInfoItem) wiAdapter.getItem(position);
                int uid = curItem.getUid();
                String vname = curItem.getVname();
                Log.d(TAG, "#" + position + ". uid : " + uid + ", vname : " + vname);

                //프래그먼트를 띄우고 특정값 전달??
                fragmentWordsList = new FragmentWordsList();
                getSupportFragmentManager().beginTransaction().replace(R.id.container, fragmentWordsList).commit();
                
            }
        });

        

    }


    //어댑터 설정
    class WordsInfoAdapter extends BaseAdapter {
        ArrayList<WordsInfoItem> itemList = new ArrayList<WordsInfoItem>();

        public void setItemList(ArrayList<WordsInfoItem> itemList) {

            this.itemList = itemList;
        }

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

        @Override
        public Object getItem(int position) {
            return itemList.get(position);
        }

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            WordsInfoView view = null;
            if(convertView == null) {
                view = new WordsInfoView(getApplicationContext());
            } else {
                view = (WordsInfoView) convertView;
            }

            view.setWordsInfoItem(itemList.get(position));

            return view;
        }
    }

    //데이터 가져오기
    private void getWordsInfo(int page) {
        mLockListView = true;
        curPage = page;
        AsyncHttpClient client = new AsyncHttpClient();
        RequestParams params = new RequestParams();
        params.put("page",page);
        client.post("서버주소", params, new JsonHttpResponseHandler() {
            @Override
            public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
                Log.d(TAG, "onFailure : ");
            }

            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                Log.d(TAG, "onSuccess : ");
                try{
                    Log.d(TAG, response.getString("res") + ", " + response.getInt("total_page"));

                    if(response.getString("res").equals("ok")) {
                        totalPage = response.getInt("total_page");
                        
                        if(itemList == null) {
                            itemList = new ArrayList<WordsInfoItem>();
                        }
                        JSONArray jsonArray = new JSONArray(response.getString("list"));
                        for (int i = 0; i < jsonArray.length(); i++) {
                            JSONObject obj = new JSONObject(jsonArray.getString(i));

                            itemList.add(new WordsInfoItem(obj.getInt("uid"), obj.getString("grade_type"), obj.getString("pub_name"), obj.getString("vname"), obj.getString("wdate"), obj.getString("who")));
                        }
                        wiAdapter.setItemList(itemList);
                        wiAdapter.notifyDataSetChanged();
                        mLockListView = false;

                     
                    } else {
                        Log.d(TAG, "데이터 가져오기 실패");
                    }

                }catch(Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }


}

 

sjoonai (210 포인트) 님이 2016년 7월 26일 질문
sjoonai님이 2016년 7월 26일 수정

1개의 답변

0 추천
 
채택된 답변

조금 이해가 안되는부분이있네요 

프래그먼트 배경을 흰색으로 주셨다면 흰색으로 보이셔야 할텐데 반투명? 하게 보이시는건 이상하네요

프래그먼트가 보여지는 영역을 xml 에 먼저 정하셨을텐데

getSupportFragmentManager().beginTransaction().replace(R.id.container, fragmentWordsList).commit(); 

이부분이네요 R.id.container  이부분에 프래그먼트를 그리신건데요

프래그먼트영역이 액티비티 위에 올라와있다면 액티비티에 있는 모든부분은 클릭이 안됩니다.

일단 메인 액티비티 xml을 보셔서 contaner 라고 정하신 부분을 보셔야할거 같구요 

그리고 안드로이드 구성하시는 방법은 하시기 나름입니다만... 모든걸 액티비티로 구성하셔도되구요 

프래그먼트로 하셔도됩니다. 생각하시는게 정확히 어떤지는 감이 안오네요.^^

 

 

은평구멍멍이 (2,630 포인트) 님이 2016년 7월 26일 답변
sjoonai님이 2016년 7월 26일 채택됨
두가지 현상이 있었는데요..
프래그먼트 배경을 흰색으로 했는데도 아래 액티비티가 희미하게 보이더군요.
그리고 액티비티가 클릭되거나 스크롤이 되더군요.
이게 안되는게 정상이라니 좀 더 확인해 봐야겠습니다.
책 보고 그대로 따라한건데 소스 어딘가 문제가 있나보네요.
답변 감사합니다.
fragment 하단의 요소가 클릭되는건
fragment의 xml container layout에 clickable="true" 를 주시면 해결됩니다.
모나미153님 답변 감사합니다....
프래그먼트로 새창을 띄우려다가 팝업 액티비티로 구현했습니다.
답변 주신건 다음에 프래그먼트 공부할때 적용해 보도록 하겠습니다.
...