안드로이드 개발 질문/답변
(글 수 45,052)
setvisiblity메소드를 이용하여 list의 내용을 접었다 폈다 하려는데 아이템 클릭시 아무 반응이 없습니다.
package android.main;
import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class List6 extends ListActivity{
public void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setListAdapter(new SpeechListAdapter(this));
}
//
protected void onListItemClick(ListView l, View v, int position, long id){
((SpeechListAdapter)getListAdapter()).toggle(position);
}
private class SpeechListAdapter extends BaseAdapter {
public SpeechListAdapter (Context context){
mContext = context;
}
public int getCount(){
return mTitles.length;
}
public Object getItem(int position){
return position;
}
public long getItemId(int position){
return position;
}
public View getView (int position, View convertView, ViewGroup parent){
SpeechView sv;
if(convertView == null){
sv = new SpeechView(mContext, mTitles[position], mDialogue[position], mExpanded[position]);
//sv = new SpeechView(mContext, mTitles[position], mDialogue[position]);
}else{
sv = (SpeechView)convertView;
sv.setTitle(mTitles[position]);
sv.setDialogue(mDialogue[position]);
sv.setExpanded(mExpanded[position]);
}
return sv;
}
public void toggle(int position){
Toast.makeText(List6.this, "1st mExpanded[position]" +mExpanded[position], Toast.LENGTH_SHORT).show();
mExpanded[position] = !mExpanded[position];
Toast.makeText(List6.this, "2nd mExpanded[position]" +mExpanded[position], Toast.LENGTH_SHORT).show();
notifyDataSetChanged();
}
private Context mContext;
private String[] mTitles =
{
"aaaa",
"bbbb",
"cccc",
"dddd",
"eeee",
"ffff",
"gggg",
"hhhh"
};
private String[] mDialogue=
{
"aaaa",
"bbbb",
"cccc",
"dddd",
"eeee",
"ffff",
"gggg",
"hhhh",
};
private boolean[] mExpanded =
{
false,
false,
false,
false,
false,
false,
false,
false
};
}
private class SpeechView extends LinearLayout{
public SpeechView (Context context, String title, String dialogue, boolean expanded){
// public SpeechView (Context context, String title, String dialogue){
super(context);
this.setOrientation(VERTICAL);
mTitle = new TextView(context);
mTitle.setText(title);
addView(mTitle, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
mDialogue = new TextView(context);
mDialogue.setText(dialogue);
addView(mDialogue, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
mDialogue.setVisibility(expanded ? VISIBLE : GONE );
// mDialogue.setVisibility(0);
}
public void setTitle (String title){
mTitle.setText(title);
}
public void setDialogue(String words){
mDialogue.setText(words);
}
public void setExpanded(boolean expanded){
// final int VISIBLE = 0x00000000;
//
// /**
// * This view is invisible, but it still takes up space for layout purposes.
// * Use with {@link #setVisibility}.
// */
// final int INVISIBLE = 0x00000004;
//
// /**
// * This view is invisible, and it doesn't take any space for layout
// * purposes. Use with {@link #setVisibility}.
// */
// final int GONE = 0x00000008;
//
mDialogue.setVisibility(expanded ? VISIBLE : GONE);
}
private TextView mTitle;
private TextView mDialogue;
}
}
위 소스 내용이구요
빨간부분에서 아이템을 클릭시 extanded가 false일때는 그냥 접어져있다가 아이템 클릭시 toggle로 인하여 false를 true로 바꿔줘서 바로 밑에다가 list의 내용을 뿌리려고 하는데 클릭을 해도 먹통입니다. 위 소스는 책의 내용인데 설명을 보고 다시 몇번을 봐도 안되네요
도와주세요 ㅠ
package android.main;
import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class List6 extends ListActivity{
public void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setListAdapter(new SpeechListAdapter(this));
}
//
protected void onListItemClick(ListView l, View v, int position, long id){
((SpeechListAdapter)getListAdapter()).toggle(position);
}
private class SpeechListAdapter extends BaseAdapter {
public SpeechListAdapter (Context context){
mContext = context;
}
public int getCount(){
return mTitles.length;
}
public Object getItem(int position){
return position;
}
public long getItemId(int position){
return position;
}
public View getView (int position, View convertView, ViewGroup parent){
SpeechView sv;
if(convertView == null){
sv = new SpeechView(mContext, mTitles[position], mDialogue[position], mExpanded[position]);
//sv = new SpeechView(mContext, mTitles[position], mDialogue[position]);
}else{
sv = (SpeechView)convertView;
sv.setTitle(mTitles[position]);
sv.setDialogue(mDialogue[position]);
sv.setExpanded(mExpanded[position]);
}
return sv;
}
public void toggle(int position){
Toast.makeText(List6.this, "1st mExpanded[position]" +mExpanded[position], Toast.LENGTH_SHORT).show();
mExpanded[position] = !mExpanded[position];
Toast.makeText(List6.this, "2nd mExpanded[position]" +mExpanded[position], Toast.LENGTH_SHORT).show();
notifyDataSetChanged();
}
private Context mContext;
private String[] mTitles =
{
"aaaa",
"bbbb",
"cccc",
"dddd",
"eeee",
"ffff",
"gggg",
"hhhh"
};
private String[] mDialogue=
{
"aaaa",
"bbbb",
"cccc",
"dddd",
"eeee",
"ffff",
"gggg",
"hhhh",
};
private boolean[] mExpanded =
{
false,
false,
false,
false,
false,
false,
false,
false
};
}
private class SpeechView extends LinearLayout{
public SpeechView (Context context, String title, String dialogue, boolean expanded){
// public SpeechView (Context context, String title, String dialogue){
super(context);
this.setOrientation(VERTICAL);
mTitle = new TextView(context);
mTitle.setText(title);
addView(mTitle, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
mDialogue = new TextView(context);
mDialogue.setText(dialogue);
addView(mDialogue, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
mDialogue.setVisibility(expanded ? VISIBLE : GONE );
// mDialogue.setVisibility(0);
}
public void setTitle (String title){
mTitle.setText(title);
}
public void setDialogue(String words){
mDialogue.setText(words);
}
public void setExpanded(boolean expanded){
// final int VISIBLE = 0x00000000;
//
// /**
// * This view is invisible, but it still takes up space for layout purposes.
// * Use with {@link #setVisibility}.
// */
// final int INVISIBLE = 0x00000004;
//
// /**
// * This view is invisible, and it doesn't take any space for layout
// * purposes. Use with {@link #setVisibility}.
// */
// final int GONE = 0x00000008;
//
mDialogue.setVisibility(expanded ? VISIBLE : GONE);
}
private TextView mTitle;
private TextView mDialogue;
}
}
위 소스 내용이구요
빨간부분에서 아이템을 클릭시 extanded가 false일때는 그냥 접어져있다가 아이템 클릭시 toggle로 인하여 false를 true로 바꿔줘서 바로 밑에다가 list의 내용을 뿌리려고 하는데 클릭을 해도 먹통입니다. 위 소스는 책의 내용인데 설명을 보고 다시 몇번을 봐도 안되네요
도와주세요 ㅠ




스트링 배열을 두개 준비하시고 하나는 원래 넣으시려는 데이터를 넣으시고 다른 하나는 비워두시고 클릭 이벤트에 따라 보여줘야할때는 원래의 스트링 배열을 넣어서 어댑터를 생성해서 리스트에 셋하시고 보여주지 말아야할 때는 텅빈 스트링 배열로 어댑터를 생성해서 리스트에 셋하시면 보여주고 안보여주는 것과 같은 효과가 나타납니다.