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

여러 개의 부분 레이아웃에서 리스트뷰를 만들고 싶습니다.

0 추천

안녕하세요, 이번에 과제를 준비하고 있는 학생입니다. 부분 레이아웃에 리스트뷰를 만들고 싶은데 도무지 안되서 부탁드립니다. 메인화면은 LinearLayout으로 설정합니다. 수직방향으로 view들을 정렬하는데 맨 위에 LinearLayout을 놓고 수평방향으로 버튼1, 2, 3을 만들어서 버튼마다 화면을 이동할 수 있도록 하고 싶습니다. 그래서 액티비티 세 개를 만들고 mainActivity에서 버튼을 누르면 inflater로 inflate할 수 있게 만들어 주었습니다. 각각 레이아웃이 바뀌는지 구분할 수 있도록 텍스트뷰만 넣어서 만들었는데 일단 화면전환이 되긴 하는데 버튼을 누르면 기존 화면의 텍스트뷰 위에 덧붙여 보여서 글자가 겹쳐보이더라구요. 해결하려고 했는데 도무지 못 찾겠어서 그냥 하려던대로 일단 부분 레이아웃 위에 리스트뷰라도 띄워보자 하고 만들었는데 다 만들고 나서 리스트뷰가 보이지 않더라구요. 혹시 몰라서 리스트뷰를 구현한 코드만 가져다가 새로운 프로젝트를 만들어서 그냥 main 안에다 넣어봤는데 잘 작동되더라구요. 어디가 잘못되었는지 알려주시면 감사하겠습니다. 좋은 하루 되세요!

p.s. 버튼으로 보여지는 모든 레이아웃들이 리스트뷰를 구현하고 있어야 합니다. FrameLayout은 화면 겹침이 없어질까 하고 넣었는데 그대로더라구요 ㅎㅎ..

MainActivity.java

package org.androidtown.news;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;

public class MainActivity extends AppCompatActivity {

    FrameLayout container;

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

        container=(FrameLayout) findViewById(R.id.container);

        Button button1=(Button) findViewById(R.id.ssunewsButton);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LayoutInflater inflater = (LayoutInflater) getSystemService(
                        Context.LAYOUT_INFLATER_SERVICE);

                inflater.inflate(R.layout.activity_ssunews, container, true);
            }
        });

        Button button2=(Button) findViewById(R.id.ssizennetButton);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LayoutInflater inflater = (LayoutInflater) getSystemService(
                        Context.LAYOUT_INFLATER_SERVICE);

                inflater.inflate(R.layout.activity_ssizennet, container, true);
            }
        });

        Button button3=(Button) findViewById(R.id.comtimesButton);
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LayoutInflater inflater = (LayoutInflater) getSystemService(
                        Context.LAYOUT_INFLATER_SERVICE);

                inflater.inflate(R.layout.activity_comtimes, container, true);
            }
        });
    }
}

 

NewsInfo.java

package org.androidtown.news;

/**
 * Created by over_ on 2018-12-13.
 */

public class NewsInfo {

    String headline;
    String date;
    int image;

    public NewsInfo(String headline, String date, int image) {
        this.headline = headline;
        this.date = date;
        this.image = image;
    }

    public String getHeadline() {
        return headline;
    }

    public void setHeadline(String headline) {
        this.headline = headline;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public int getImage() {
        return image;
    }

    public void setImage(int image) {
        this.image = image;
    }
}

 

NewsInfoView.java

package org.androidtown.news;

import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
 * Created by over_ on 2018-12-13.
 */

public class NewsInfoView extends LinearLayout {
    TextView headlineTextView;
    TextView dateTextView;

    public NewsInfoView(Context context) {
        super(context);

        init(context);
    }

    public NewsInfoView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);

        init(context);
    }

    private void init(Context context){
        LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.news_info, this, true);

        headlineTextView=(TextView) findViewById(R.id.headlineTextView);
        dateTextView=(TextView) findViewById(R.id.dateTextView);
    }

    public void setHeadline(String headline){
        headlineTextView.setText(headline);
    }

    public void setDate(String date){
        dateTextView.setText(date);
    }
}

 

Ssunews.java

package org.androidtown.news;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;

import java.util.ArrayList;

public class Ssunews extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

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

        NewsAdapter adapter=new NewsAdapter();
        adapter.addItem(new NewsInfo("헤드라인1", "날짜1", R.drawable.singer));
        adapter.addItem(new NewsInfo("헤드라인2", "날짜2", R.drawable.singer2));
        adapter.addItem(new NewsInfo("헤드라인3", "날짜3", R.drawable.singer3));
        adapter.addItem(new NewsInfo("헤드라인4", "날짜4", R.drawable.singer4));
        adapter.addItem(new NewsInfo("헤드라인5", "날짜5", R.drawable.singer5));
        adapter.addItem(new NewsInfo("헤드라인6", "날짜6", R.drawable.singer));
        adapter.addItem(new NewsInfo("헤드라인7", "날짜7", R.drawable.singer2));
        adapter.addItem(new NewsInfo("헤드라인8", "날짜8", R.drawable.singer3));
        adapter.addItem(new NewsInfo("헤드라인9", "날짜9", R.drawable.singer4));
        adapter.addItem(new NewsInfo("헤드라인10", "날짜10", R.drawable.singer5));

        ssunewsListView.setAdapter(adapter);

        setContentView(R.layout.activity_ssunews);

    }

    class NewsAdapter extends BaseAdapter {
        ArrayList<NewsInfo> items=new ArrayList<NewsInfo>();

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

        public void addItem(NewsInfo newsInfo){
            items.add(newsInfo);
        }

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

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

        @Override
        public View getView(int position, View view, ViewGroup viewGroup) {
            NewsInfoView newsInfoView=new NewsInfoView(getApplicationContext());

            NewsInfo newsInfo=items.get(position);
            newsInfoView.setHeadline(newsInfo.getHeadline());
            newsInfoView.setDate(newsInfo.getDate());

            return newsInfoView;
        }
    }
}

 

godgodgyu (120 포인트) 님이 2018년 12월 13일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...