2011-11-03 3 views
2

ViewFlipper를 ListItem으로 갖는 ListView를 만들었습니다. ViewFlipper에는 두 개의 상대 레이아웃이 있습니다 (ID는 rView1, rView2입니다). ListView에 onItemClickListener() 및 OnItemLongClickListener를 설정하고 있습니다.ViewFlipper onItemClickListener가있는 목록보기 항목이 작동하지 않습니다.

onLongClickListener() viewFlipper는 nextView를 표시하고 onItemClickListener()는 현재 view viewFlipper를 확인합니다. 사례 1 : ViewFlipper의 현재보기가 -rView1 인 경우 새로운 활동이 시작됩니다. 사례 2 : ViewFlipper의 현재보기가 -rView2 인 경우보기를 다시 건너 뜁니다. 문제 2가 제대로 작동하지 않는 문제가 있습니다. 다른보기가 목록에서 뒤집습니다. 여기 내 코드입니다 -

ListActivity-

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.d("onCreate", "ListActivity"); 
    YouponDatabase.getInstance(getApplicationContext()); 
    setContentView(R.layout.yp_coupon_list); 
    handler = new Handler(); 
    listView = (ListView) findViewById(R.id.yp_coupon_list); 
    adapter = new ListAdapter(getApplicationContext()); 
    listView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parentView, View view, 
       int position, long column) { 
      View v = ((ViewFlipper) view.findViewById(R.id.view_flipper)) 
        .getCurrentView(); 
      if (v.getId() == R.id.rView1) { 
       Log.d("ListActivity", "detail item click"); 
       Intent intent = new Intent(ListActivity.this, 
         DetailActivity.class); 
       startActivity(intent); 
      } else if (v.getId() == R.id.rView2) { 
       Log.d("ListActivity", "share item click::" 
         + view.toString()); 
       adapter.flipItem(view); 
      } 
     } 
    }); 
    listView.setOnItemLongClickListener(new OnItemLongClickListener() { 

     @Override 
     public boolean onItemLongClick(AdapterView<?> parentView, 
       View view, int position, long column) { 
      Log.d("ListActivity", "item long click"); 
      adapter.flipItem(view, position); 
      return true; 
     } 
    }); 
} 

ListAdapter-

public class ListAdapter extends BaseAdapter { 

private static class ViewHolder { 
    private ViewFlipper flipper; 
    private ImageView listImage; 
    private TextView Area; 
}; 

private LayoutInflater inflater; 
private Context appContext; 
private Handler handler = new Handler(); 
private List<item> currentList; 
private DrawableLoader drawableLoader = null; 
private ViewHolder viewHolder; 

public ListAdapter(Context context) { 
    inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    appContext = context.getApplicationContext(); 
    drawableLoader = new DrawableLoader(appContext); 
} 

public void setList(List<item> list) { 
    currentList = list; 
} 

@Override 
public int getCount() { 
    if (currentList != null) 
     return currentList.size(); 
    return 0; 
} 

@Override 
public Object getItem(int position) { 
    return currentList.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return -1; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    final item x = currentList.get(position); 

    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.yp_coupon_list_content, 
       null); 
    } 
    viewHolder = (ViewHolder) convertView.getTag(); 
    if (viewHolder == null && convertView.getId() == -1) { 
     viewHolder = new ViewHolder(); 
     viewHolder.flipper = (ViewFlipper) convertView 
       .findViewById(R.id.view_flipper); 
     viewHolder.listImage = (ImageView) convertView 
       .findViewWithTag(appContext.getResources().getString(
         R.string.yp_image_tag)); 
     viewHolder.Area = (TextView) convertView 
       .findViewById(R.id.yp_coupon_area); 
     convertView.setTag(viewHolder); 
    } else { 
     View v = viewHolder.flipper.getCurrentView(); 
     if (v.getId() == R.id.deal_share) { 
      Log.d("list Adapter", "Reset it"); 
      viewHolder.flipper.setDisplayedChild(0); 
     } 
    } 
    viewHolder.Area.setText(x.getArea()); 
    return convertView; 
} 

public void flipItem(View view, int position) { 
    if (view != null) { 
     Log.d("flipItem", "" + view.toString()); 
     ViewFlipper viewFlipper = ((ViewFlipper) view 
       .findViewById(R.id.view_flipper)); 
     if (viewFlipper.getCurrentView().getId() == R.id.deal_detial) { 
      Log.d("flipItem", "now share comes"); 
      viewFlipper.showNext(); 
      ImageView share = (ImageView) view.findViewById(R.id.share); 
      share.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 
        Log.d("Share clicked", "Inflate layout"); 
       } 
      }); 
     } else { 
      Log.d("flipItem", "now detail comes"); 
      viewFlipper.showNext(); 
     } 

    } 
} 

public void flipItem(View view) { 
    if (view != null) { 
     Log.d("flipItem", "" + view.toString()); 
     ViewFlipper viewFlipper = ((ViewFlipper) view 
       .findViewById(R.id.view_flipper)); 
     viewFlipper.showNext(); 
    } 
} 

, 내 코드에서 어떤 문제가 있는지 알아낼 수 없습니다 제발 도와주세요.

+0

확인이 하나 http://stackoverflow.com/questions/14531897/viewflipper-in-listview-row –

답변

관련 문제