2012-05-21 3 views
0

두 개의 텍스트 뷰와 이미지 뷰가있는 사용자 정의 목록 뷰가 있습니다. 각 행을 클릭하면 사용자 정의 대화 상자가 표시됩니다. listview를 열고 행 iam을 클릭하면 대화 상자를 볼 수 있습니다. 반면에 스크롤하고 행을 클릭하면 대화 상자가 표시되지 않습니다. 그것은 내가 각각의 모든 행에 대해 대화 상자를 표시 할 수 스피 스크롤 경우에도 (대신 이미지 뷰의) 텍스트 뷰 인 경우 내가 관찰 또 다른 한가지는 `이미지가로드 된 경우 onListItemClick이 제대로 작동하지 않습니다.

final Dialog password = new Dialog(VCStegoInboxWithOutCheckboxes.this); 
     password.setContentView(R.layout.dialog); 
     password.setTitle("Enter your Password"); 

     final EditText getPassword = (EditText) password 
       .findViewById(R.id.edconfirmpwd); 
     Button okButton = (Button) password.findViewById(R.id.ok); 
     okButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       String ConfirmCode = getPassword.getText().toString(); 
       SharedPreferences settingsActivity = getSharedPreferences(
         "UserName", Activity.MODE_PRIVATE); 
       String Password = settingsActivity.getString("Password", null); 

       if (ConfirmCode.equals(Password)) { 
             Intent showMsgIntent = new Intent(); 
         showMsgIntent.setClass(getApplicationContext(), 
           VCStegoShowMessageScreen.class); 

         startActivity(showMsgIntent); 


       } else { 
        Toast.makeText(getBaseContext(), "InvalidPassword", 
          Toast.LENGTH_SHORT).show(); 

       } 

       password.dismiss(); 

      } 
     }); 
     Button cancelButton = (Button) password.findViewById(R.id.cancel); 
     cancelButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       System.out.println("Entered on cancel button clicked"); 
       password.dismiss(); 

      } 
     }); 
     password.show(); 

    } 

을 다음과 같이

내 onListItemclick 코드입니다. 내 xml 파일은

<?xml version="1.0" encoding="utf-8"?> 

<TextView 
    android:id="@+id/tvinboxname" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

<ImageView 
    android:id="@+id/tvinboxmsg" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"   
    android:layout_below="@+id/tvinboxname" 

    android:contentDescription="@string/contentDes" /> 

<TextView 
    android:id="@+id/tvtimeStamp" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_below="@+id/tvinboxmsg" 
    android:textAppearance="?android:attr/textAppearanceSmall" /> 

+0

같다 문제가있는 것처럼 보이는 코드는 대화 상대가 아니라 목록에있는 것입니다. – Barak

+0

당신의 listitem 클릭은 어디에 있습니까? – kyogs

+0

어댑터 메소드 및 xml이 게시됩니다. 사실 내가 목록 항목으로 이미지보기를 대체하는 경우 문제가 발생하지 않습니다. 그리고 이미지보기가있는 목록이 올바르게 표시됩니다. 스크롤을 한 후에야 iam이 대화 상자를 가져올 수 없습니다. – user1203673

답변

1

지정 ID는

같은 루트 레이아웃 ID에 대한

public class InboxAdapter extends BaseAdapter { 
    private LayoutInflater inflater; 
    private TextView Tvname, TVtimeStamp; 
    private ImageView IVmsg; 

    public InboxAdapter(Context context, List<VCStegoInboxList> inboxList) { 
     inflater = LayoutInflater.from(context); 
     VCStegoInboxWithOutCheckboxes.Inboxlist = inboxList; 
    } 
    public class ViewHolder{ 
      private TextView Tvname; 
      private TextView TVtimeStamp;    
      private ImageView IVmsg; 
      } 

    public int getCount() { 
     return VCStegoInboxWithOutCheckboxes.Inboxlist.size(); 
    } 

    // @Override 
    public Object getItem(int position) { 
     return VCStegoInboxWithOutCheckboxes.Inboxlist.get(position); 
    } 

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

    // @Override 
    public View getView(final int position, View convertView, 
      ViewGroup parent) { 

     ViewHolder holder; 

      if (convertView==null){ 

      holder = new ViewHolder(); 

     convertView = inflater.inflate(R.layout.inboxtextviews, null); 
     Tvname = (TextView) convertView.findViewById(R.id.tvinboxname); 

     IVmsg = (ImageView) convertView.findViewById(R.id.tvinboxmsg); 



     TVtimeStamp = (TextView) convertView.findViewById(R.id.tvtimeStamp); 

     convertView.setTag(holder); 
     }else{ 

     holder = (ViewHolder) convertView.getTag(); 
     } 
      Tvname.setText(VCStegoInboxWithOutCheckboxes.Inboxlist 
       .get(position).getname()); 
      IVmsg.setImageBitmap(VCStegoInboxWithOutCheckboxes.Inboxlist.get(
        position).getBitmap()); 
      TVtimeStamp.setText(VCStegoInboxWithOutCheckboxes.Inboxlist.get(
        position).getTimeStamp()); 
     return convertView; 
    } 

} 

입니다

내 어댑터 방법입니다

<RelativeLayout 
    android:id="@+id/root" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

<your TextView/> 
<your ImageView/> 
<your TextView/> 

</RelativeLayout> 

root = (RelativeLayout) convertView.findViewById(R.id.root); 

return convertView; 라인 위의 온 클릭 리스너에게 쓰기

같은 어댑터 클래스의 루트를 얻을 당신 어댑터 클래스 온 클릭 리스너는 당신은 당신의 목록을 모두 게시하기 위해 필요한이

root.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
//toast display dialog code here 
} 
}); 
관련 문제