잼잼
178
2017-11-23 09:42:38
12
2050

왜 중지됨이 뜨는건지......미치겟네요..ㅠㅠ


안녕하세요 리스트뷰 만드는 중인데 에러하나 없이 잘만 코딩했는데 실행하면 중지됨 뜨면서 팅기네요 ㅜㅜ...도와주세용 ㅠ
MainActivity.java 파일

package org.androidtown.listview;

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

import org.androidtown.listview.R;

import java.util.ArrayList;

/**
* Created by Heo on 2017-11-23.
*/

public class MainActivity extends AppCompatActivity{

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

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

SayAdapter adapter = new SayAdapter();
adapter.addItem(new SayItem("Heo", "High School", "4","Hi","1","2","3","2017.11.23"));
listView.setAdapter(adapter);
}

class SayAdapter extends BaseAdapter{
ArrayList<SayItem> items = new ArrayList<SayItem>();

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


public void addItem(SayItem item) {
items.add(item);
}

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

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

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
SayItemView view1 = new SayItemView(getApplicationContext());

SayItem item = items.get(i);

view1.setName(item.getName());
view1.setCommunity(item.getCommunity());
view1.setLevel(item.getLevel());
view1.setContent(item.getContent());
view1.setHap(item.getHap());
view1.setComment(item.getComment());
view1.setHits(item.getHits());
view1.setDate(item.getDate());


return view1;
}
}

}
SayItem.java 파일

package org.androidtown.listview;

/**
* Created by Heo on 2017-11-23.
*/

public class SayItem {

String name;
String community;
String level;
String content;
String hap;
String comment;
String hits;
String date;

public SayItem(String name, String community, String level, String content, String hap, String comment , String hits , String date) {
this.name = name;
this.community = community;
this.level = level;
this.content = content;
this.hap = hap;
this.comment = comment;
this.date = date;
this.hits = hits;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getCommunity() {
return community;
}

public void setCommunity(String community) {
this.community = community;
}

public String getLevel() {
return level;
}

public void setLevel(String level) {
this.level = level;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

public String getHap() {
return hap;
}

public void setHap(String hap) {
this.hap = hap;
}

public String getComment() {
return comment;
}

public void setComment(String comment) {
this.comment = comment;
}

public String getDate() {
return date;
}

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

public String getHits() {
return hits;
}

public void setHits(String hits) {
this.hits = hits;
}

@Override
public String toString() {
return "SayItem{" +
"name='" + name + '\'' +
", community='" + community + '\'' +
", level='" + level + '\'' +
", content='" + content + '\'' +
", hap='" + hap + '\'' +
", comment='" + comment + '\'' +
", hits='" + hits + '\'' +
", date='" + date + '\'' +
'}';
}
}
SayItem.java 파일

package org.androidtown.listview;

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

/**
* Created by Heo on 2017-11-23.
*/

public class SayItemView extends LinearLayout {
TextView textView;
TextView textView2;
TextView textView3;
TextView textView4;
TextView textView5;
TextView textView6;
TextView textView7;
TextView textView8;
ImageView imageView;


public SayItemView(Context context) {
super(context);
init(context);
}

public SayItemView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
}

@SuppressLint("WrongViewCast")
private void init(Context context){
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.say_item,this,true);

textView = (TextView) findViewById(R.id.textView);
textView2 = (TextView) findViewById(R.id.textView2);
textView3 = (TextView) findViewById(R.id.textView3);
textView4 = (TextView) findViewById(R.id.textView4);
textView5 = (TextView) findViewById(R.id.textView5);
textView6 = (TextView) findViewById(R.id.textView6);
textView7 = (TextView) findViewById(R.id.textView7);
textView8 = (TextView) findViewById(R.id.textView8);
imageView = (ImageView) findViewById(R.id.imageView);

}
public void setName(String name){
textView.setText(name);
}

public void setCommunity(String community){
textView2.setText(community);
}

public void setLevel(String level){
textView3.setText(level);
}

public void setContent(String content){
textView4.setText(content);
}

public void setHap(String hap){
textView5.setText(hap);
}

public void setComment(String comment){
textView6.setText(comment);
}

public void setHits(String hits){
textView7.setText(hits);
}

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

}
say_item.xml 파일

<?xml version="1.0" encoding="utf-8"?>
<ListView
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:id="@+id/listView">

<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:id="@+id/imageView"
android:src="@drawable/ic_launcher_foreground"/>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="별명" />

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="게시판" />

<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right"
android:text="레벨" />
</LinearLayout>

<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:text="내용"
android:textSize="45dp" />
</RelativeLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="합"/>

<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="댓"/>

<TextView
android:id="@+id/textView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="조회수"/>

<TextView
android:id="@+id/textView8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:gravity="right"
android:text="날짜/시간"/>

</LinearLayout>
</LinearLayout>
</ListView>
0
0
  • 답변 12

  • 앙투안그리즈만
    249
    2017-11-23 11:36:47

    어떤 에러가 발생하는건가요??

    0
  • GAN
    1k
    2017-11-23 11:58:57
    로그 확인해보세요.


    0
  • 잼잼
    178
    2017-11-23 16:27:10 작성 2017-11-23 16:35:30 수정됨

    앙투안그리즈만 // GAM 

    글을 새로 만드는건 좀 아닌것같아 여기 붙일게요.. 

    확대해야하는거 미리 죄송합니다....

    3번째 줄은 

    java.lang.RuntimeException: Unable to start activity ComponentInfo{org.androidtown.listview/org.androidtown.listview.MainActivity}: android.view.InflateException: Binary XML file line #0: addView(View, LayoutParams) is not supported in AdapterView 입니다.


    이렇게 뜹니다 ㅠㅠ

    0
  • yoonhok
    88
    2017-11-23 16:47:27

    하시려는게 SayItem을 List로 보여주려고 하시는 것 같은데요.

    코드를 잘못 적용하신 것 같습니다.


    지금 MainActivity의 레이아웃으로 say_item.xml 을 inflate하고 있는데요.

    xml 파일을 둘로 나누셔야 합니다.

    1. Activity에서 보여주는 전체 화면을 위한 layout

    2. ListView에서 보여줄 각 item 하나를 위한 layout


    지금 코드는 이걸 하나로 합쳐서 MainActivity에서도 inflate하고, SayItemView에서도 inflate하고...

    좀 많이 이상하네요.

    SayItemView가 LinearLayout을 상속받는 것도 이상하고요.


    전반적으로 ListView를 구현에 대해 다시 한 번 확인하시는게 좋을 것 같습니다.

    0
  • 잼잼
    178
    2017-11-23 16:54:53

    yoonhok님 댓글감사합니다!

    강의하는거 보고 똑같이 따라했는데 이렇게 되네요 ㅠㅠ

    다시한번 확인해보겠습니다ㅠㅠ. 

    저는 adapter 클래스를 만들어서 MainActivity 안의 어댑터를 adapter 클래스로 옮기면 되는줄 알았습니다..

    0
  • 잼잼
    178
    2017-11-23 17:21:42

    @yoonhok님

    say_item.xml파일을 둘로 나눠야한단건가요?

    1. Activity에서 보여주는 전체 화면을 위한 layout -> activity_main.xml

    2. ListView에서 보여줄 각 item 하나를 위한 layout -> say_item.xml 

    이렇괴 되는것 아닌가요?

     say_item 을 어떻게 바꿔야하는지 ㅠ

    0
  • yoonhok
    88
    2017-11-23 17:51:57

    네 맞습니다. activity_main.xml 에는 <ListView> 만 갖고 있으면 되고요.

    say_item.xml에 실제 각 하나의 항목에 들어갈 view들을 넣어주시면 되요.

    MainActivity에서도 setContentView(R.layout.say_item); 이 부분을 activity_main으로 바꿔주시면 되고요.


    학습 목적으로 BaseAdapter를 직접 구현하신 건가요?

    그렇지 않으면 ArrayAdpater나 기타 다른 제공되는 구현체를 사용하시는 게 더 편하기도 하고요..

    0
  • 잼잼
    178
    2017-11-23 18:53:27

    현재 activity_main.xml 에 ListView를 추가하고 

     setContentView(R.layout.say_item); > activity_main 으로 수정.




    수정 후의 에러입니다..그 전보다는 줄어들었네요 ㅎㅎ...................................하하하하하

    하하하하하

    하하하하하하하하하하하하!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    0
  • yoonhok
    88
    2017-11-23 18:59:25

    아뇨 그 2개만 고치는걸로는 해결되진 않을 것 같고요...


    SayItemView가 VIewHolder로 쓰시는 것으로 보이는데, LinearLayout을 상속받아 구현할 필요가 없습니다.

    say_item.xml에서는 ListView를 제거해야 하고요.


    일단 귀찮으시겠더라도, 아래 글 보시면 해결될거라 봅니다.


    https://github.com/codepath/android_guides/wiki/Using-a-BaseAdapter-with-ListView

    0
  • 잼잼
    178
    2017-11-23 19:11:52

    감사합니다 ㅠㅠ

    하나만 더 물어봐도 될까요 ㅠㅠ.....

    예제나 강의나 View getView를 보면 안의 인자가 이렇게 되어있던데

    View getView(int position, View convertView, ViewGroup parent)


    저는

    View getView(int i , View view , ViewGroup viewgroup) 입니다. 혹시 이것 때문인건가요?

    저는 generate에서 getview를 불러와도 이렇게 되는데 이건 버젼의 문제인건지..


    0
  • yoonhok
    88
    2017-11-23 22:05:35

    중요한 건 타입이지, 인자 명은 중요하지 않아요.

    말씀하신 2개의 메서드는 정확히 동일한 메서드입니다...

    0
  • GAN
    1k
    2017-11-24 10:52:09

    수정 후 에러는 MainActivity.java 파일의 30 번째 줄(아마도 listView.setAdapter(adapter); 부분)에서 listView 가 null 이어서 발생한 문제입니다.
    activity_main.xml 에 listView 라는 id 를 가진 ListView 가 있는지 확인해보세요.


    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.