안녕하세요, 이번에 과제를 준비하고 있는 학생입니다. 부분 레이아웃에 리스트뷰를 만들고 싶은데 도무지 안되서 부탁드립니다. 메인화면은 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;
}
}
}