1
I이 사용자 정의 목록보기 어댑터와 2 개 레이아웃 XML 파일 표준보기 및 목록 항목이 내가 원하는안드로이드 - 선택 사용자 정의 목록 항목에 레이아웃보기를 변경
을 선택했을 때 내가 표시 할 하나 하나 목록에서 항목을 선택하면 더 많은 데이터가 표시되고 다른 항목을 선택하면 이전에 선택한 항목이 기본값으로 돌아가므로 한 번에 하나의 항목 만 선택할 수 있습니다.
heres 내가 시도했지만, 내가 원하는대로 작동하지 않습니다. 어떤 제안입니까 ??
MainActivity.java 파일
public class MainActivity extends Activity {
ListView lv;
List<ListViewItem> items;
CustomListViewAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.listView);
items = new ArrayList<MainActivity.ListViewItem>();
items.add(new ListViewItem()
{{
ThumbnailResource = R.drawable.ic_launcher;
Title = "Item1";
SubTitle = "Item1 Description";
Detail1 =" more details";
Detail2 ="01 123455";
}});
items.add(new ListViewItem()
{{
ThumbnailResource = R.drawable.ic_launcher;
Title = "Item2";
SubTitle = "Item2 Description";
Detail1 ="additional details";
Detail2 ="090 641123";
}});
adapter = new CustomListViewAdapter(this, items);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
adapter.selectedItem(position);
adapter.notifyDataSetChanged();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
class ListViewItem
{
public int ThumbnailResource;
public String Title;
public String SubTitle;
public String Detail1;
public String Detail2;
}
}
CustomListViewAdapter.java
package com.customlistview;
import java.util.List;
import com.customlistview.MainActivity.ListViewItem;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
public class CustomListViewAdapter extends BaseAdapter
{
LayoutInflater inflater;
List<ListViewItem> items;
int position;
public CustomListViewAdapter(Activity context, List<ListViewItem> items) {
super();
this.items = items;
this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return items.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
public void selectedItem(int position)
{
this.position = position; //position must be a global variable
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ListViewItem item = items.get(position);
View vi=convertView;
View vi2=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.item_row, null);
ImageView imgView = (ImageView) vi.findViewById(R.id.imgThumbnail);
TextView txtTitle = (TextView) vi.findViewById(R.id.txtTitle);
TextView txtSubTitle = (TextView) vi.findViewById(R.id.txtSubTitle);
imgView.setImageResource(item.ThumbnailResource);
txtTitle.setText(item.Title);
txtSubTitle.setText(item.SubTitle);
if(this.position == position)
{
vi2 = inflater.inflate(R.layout.item_row_selected, null);
ImageView imgView2 = (ImageView) vi2.findViewById(R.id.imgThumbnail);
TextView txtTitle2 = (TextView) vi2.findViewById(R.id.txtTitle);
TextView txtSubTitle2 = (TextView) vi2.findViewById(R.id.txtSubTitle);
imgView2.setImageResource(item.ThumbnailResource);
txtTitle2.setText(item.Title);
txtSubTitle2.setText(item.SubTitle);
return vi2;
}
return vi;
}
}
선정 된 XML을
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/relativeLayout2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="5dip">
<ImageView
android:layout_width="78dip"
android:layout_height="78dip"
android:id="@+id/imgThumbnail"
android:layout_alignParentLeft="true"
android:layout_centerInParent="true"
android:layout_marginLeft="-3dip"
android:scaleType="centerInside">
</ImageView>
<TextView
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_height="wrap_content"
android:text="TextView"
android:layout_width="wrap_content"
android:id="@+id/txtTitle"
android:layout_toRightOf="@+id/imgThumbnail"
android:layout_marginTop="6dip"
android:layout_marginLeft="6dip">
</TextView>
<TextView
android:layout_height="wrap_content"
android:text="TextView"
android:layout_width="wrap_content"
android:id="@+id/txtSubTitle"
android:layout_toRightOf="@+id/imgThumbnail"
android:layout_below="@+id/txtTitle"
android:layout_marginTop="3dip"
android:layout_marginLeft="6dip">
</TextView>
<TextView
android:id="@+id/txtdet1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/txtSubTitle"
android:layout_alignBottom="@+id/txtSubTitle"
android:layout_toRightOf="@+id/txtTitle"
android:text="TextView" />
<TextView
android:id="@+id/txtdet2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/txtSubTitle"
android:layout_alignRight="@+id/TextView01"
android:layout_below="@+id/txtSubTitle"
android:text="TextView" />
<Button
android:id="@+id/btnaccept"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/imgThumbnail"
android:layout_below="@+id/txtdet2"
android:text="details" />
<Button
android:id="@+id/btndetails"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/txtdet2"
android:layout_below="@+id/txtdet2"
android:text="cancel" />
, 나는 다음의 항목의 클릭에이 플래그를 전환
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/relativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="5dip">
<ImageView
android:layout_width="78dip"
android:layout_height="78dip"
android:id="@+id/imgThumbnail"
android:layout_alignParentLeft="true"
android:layout_centerInParent="true"
android:layout_marginLeft="-3dip"
android:scaleType="centerInside">
</ImageView>
<TextView
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_height="wrap_content"
android:text="TextView"
android:layout_width="wrap_content"
android:id="@+id/txtTitle"
android:layout_toRightOf="@+id/imgThumbnail"
android:layout_marginTop="6dip"
android:layout_marginLeft="6dip">
</TextView>
<TextView
android:layout_height="wrap_content"
android:text="TextView"
android:layout_width="wrap_content"
android:id="@+id/txtSubTitle"
android:layout_toRightOf="@+id/imgThumbnail"
android:layout_below="@+id/txtTitle"
android:layout_marginTop="3dip"
android:layout_marginLeft="6dip">
</TextView>
왜 둘 다 병합하지 않는가? 아이템 선택시 추가 정보 숨기기/보이기? – Rohit5k2
두 레이아웃을 하나의 레이아웃 파일로 결합하고 onItemClick에서 가시성을 전환 할 수 있습니다. – Simar
가능한 한 많은 항목을 목록에 표시하고 싶을 때 클릭시 행의 높이를 높이고 추가 정보를 표시하려고합니다. 정보를 숨기고 숨기기가 프로그래밍 방식으로 높이를 설정할 수 있다면 작동하지만, getLayoutParams가 null을 반환하므로 GetView에서 높이를 설정하는 것 같습니다. 또한 이전에 클릭 한 행의 높이를 어떻게 재설정 할 수 있습니까? –