2015-01-08 3 views
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> 

+0

왜 둘 다 병합하지 않는가? 아이템 선택시 추가 정보 숨기기/보이기? – Rohit5k2

+1

두 레이아웃을 하나의 레이아웃 파일로 결합하고 onItemClick에서 가시성을 전환 할 수 있습니다. – Simar

+0

가능한 한 많은 항목을 목록에 표시하고 싶을 때 클릭시 행의 높이를 높이고 추가 정보를 표시하려고합니다. 정보를 숨기고 숨기기가 프로그래밍 방식으로 높이를 설정할 수 있다면 작동하지만, getLayoutParams가 null을 반환하므로 GetView에서 높이를 설정하는 것 같습니다. 또한 이전에 클릭 한 행의 높이를 어떻게 재설정 할 수 있습니까? –

답변

0
SIMAR 제안 및 가시성을 전환 할 수있는 ListViewItem에 플래그를 추가로 내가 한

표준 레이아웃 XML 내가 보여 주거나 숨기고 싶은 컨트롤

txtdet1.setVisibility(item.Expanded ? View.VISIBLE : View.GONE);