2013-05-09 76 views
1

我在我的Android程序中使用了一个listview。如何在列表视图中的可点击列表的行和按钮?

我有行。 1)我有按钮中的自定义行,我想点击按钮,然后打开警报框,这一行点击然后打开新的活动,但只有一个按钮点击不行点击。在这种情况下如何可能。我的代码在下面。

谢谢。

public class AlMessagesAdapter extends ArrayAdapter<DtoAllMessages> { 

    private LayoutInflater inflator; 
    private ArrayList<DtoAllMessages> userlist; 

    public AlMessagesAdapter(Activity context, ArrayList<DtoAllMessages> list) { 
     super(context, R.layout.custom_list, list); 

     this.userlist = list; 
     inflator = context.getLayoutInflater(); 
    } 

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

     ViewHolder holder = null; 
     if (convertView == null) { 
      convertView = inflator.inflate(R.layout.custom_list, null); 
      holder = new ViewHolder(); 
      holder.title = (TextView) convertView.findViewById(R.id.tvName); 
      holder.date_cr = (TextView) convertView.findViewById(R.id.tvDate); 
      holder.img = (ImageView)convertView.findViewById(R.id.ivIcon); 
      holder.tokenBtn = (Button)convertView.findViewById(R.id.tokenBtn); 
      convertView.setTag(holder); 
      convertView.setTag(R.id.tvName, holder.title); 
      convertView.setTag(R.id.tvDate, holder.date_cr); 
      convertView.setTag(R.id.ivIcon,holder.img); 
      convertView.setTag(R.id.tokenBtn,holder.tokenBtn); 

     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     String token = userlist.get(position).getToken(); 

     Log.v("MessageList", "token:" + token); 

     token = token.substring(0,token.length()-3); 

     holder.title.setText(userlist.get(position).getName()+"("+token+")"); 

     String type_data = userlist.get(position).getType().toString(); 

     if((type_data.equals("text")) || (type_data.equals("photo"))) 
     { 
      Log.v("log", " if text photo "); 
      holder.date_cr.setText(userlist.get(position).getType()+":Received "+userlist.get(position).getCreated_date()); 
      holder.tokenBtn.setVisibility(View.VISIBLE); 
      list.setItemsCanFocus(true); 
     } 
     else if(type_data.equals("out")) 
     { 
      Log.v("log", " else out "); 
      holder.date_cr.setText(userlist.get(position).getType()+":Sent "+userlist.get(position).getCreated_date()); 
      holder.tokenBtn.setVisibility(View.GONE); 
     } 

     if(type_data.equals("text")) 
     { 
      Log.v("log", " if text "); 
      holder.img.setBackgroundResource(R.drawable.chatmessage); 

     } 
     else if(type_data.equals("photo")) 
     { 
      Log.v("log", " ese if photo "); 
      holder.img.setBackgroundResource(R.drawable.photomessage); 

     } 
     else if(type_data.equals("out")) 
     { 
      Log.v("log", " ese if out "); 
      holder.img.setBackgroundResource(R.drawable.outmessafe); 
     } 


     if(position%2==0) 
     { 
      convertView.setBackgroundResource(R.drawable.whitebackground); 
     } 
     else 
     { 
      convertView.setBackgroundResource(R.drawable.greybackground); 
     } 

     holder.tokenBtn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Log.v("log_tag"," token button clicked"); 
      } 
     }); 


     return convertView; 
    } 

    class ViewHolder { 
     protected ImageView img; 
     protected TextView date_cr; 
     protected TextView title; 
     protected Button tokenBtn; 
    } 
} 

和列表点击事件如下::

list.setOnItemLongClickListener(new OnItemLongClickListener() { 

      @Override 
      public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
        int position, long arg3) { 
       // TODO Auto-generated method stub 

       msg = userLIstArray.get(position).getMessage(); 
        token = userLIstArray.get(position).getToken(); 
        type = userLIstArray.get(position).getType(); 
        int msgId = userLIstArray.get(position).getMessageid(); 
        token = token.substring(0,token.length()-3); 
        int token_value = Integer.parseInt(token) * 1000; 

       if(type.equals("text")) 
       { 
        Log.v("log", " if in text to Display " + msg + " token "+token); 
        Intent i = new Intent(MessagesList.this,DisplayPopupActivity.class); 
        i.putExtra("msg", msg); 
        i.putExtra("token", token); 
        i.putExtra("msgid", msgId); 
        startActivity(i); 

       } 
       else if(type.equals("photo")) 
       { 
        Log.v("log", " else in IMage to Display " + msg + " token "+token); 

        Log.v("log","token "+token+" type "+type + " position "+position + "msgId "+ msgId); 

        Intent i = new Intent(MessagesList.this,DisplayImageActivity.class); 
         i.putExtra("imgData", msg); 
         i.putExtra("token", token); 
         i.putExtra("msgid", msgId); 
         startActivity(i); 

       //Log.v("log"," Message" +message); 
       //Toast.makeText(AllMessageActivity.this, "Message "+message, Toast.LENGTH_LONG).show(); 
       } 

       return false; 
      } 
     }); 
    } 

回答

3

试试这个,

而不是按钮使用TextView。并写onclickListernerTextView。我在ListView面临同样的问题按钮点击使用textview现在它的工作正常。去尝试一下。

+0

感谢Murali我会尝试。 – crickpatel0024 2013-05-09 09:38:02

+0

感谢Murali解决了这个问题! – crickpatel0024 2013-05-09 09:45:43

+0

但你可以使用按钮,如果你不得不... – Cjames 2013-05-09 09:53:35

2

可以使用添加行单击事件:

listView.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(final AdapterView<?> parent, final View view, final int position, long id) { 
      //go to new activity 
    }); 

而且按钮的事件,因为你正在做的..

holder.tokenBtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Log.v("log_tag"," token button clicked"); 
      //show alert 
     } 
    }); 
+0

感谢您的答复,但我cliked行不工作,我编辑在我的问题在ListView单击事件请检查它。 – crickpatel0024 2013-05-09 09:12:33

+0

你正在设置setOnItemLongClickListener而不是setOnItemClickListener,你到底想要什么? – Nermeen 2013-05-09 09:15:16

+0

我列表的行contanst cliked然后新的活动调用。 – crickpatel0024 2013-05-09 09:16:51

1

内打电话给你clickevent如果条件

if (convertView == null) { 
      convertView = inflator.inflate(R.layout.custom_list, null); 
      holder = new ViewHolder(); 
      holder.title = (TextView) convertView.findViewById(R.id.tvName); 
      holder.date_cr = (TextView) convertView.findViewById(R.id.tvDate); 
      holder.img = (ImageView)convertView.findViewById(R.id.ivIcon); 
      holder.tokenBtn = (Button)convertView.findViewById(R.id.tokenBtn); 
      holder.tokenBtn.setOnClickListener(click); 

     } 

之外创建clicklistner。

private OnClickListener click = new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     // do your stuff here 
    } 
}; 
+1

感谢您对我的问题的答复! – crickpatel0024 2013-05-09 09:47:15

1

在设置OnclickListner

private LayoutInflater inflator; 
private ArrayList<DtoAllMessages> userlist; 
private Context context; //added 

public AlMessagesAdapter(Activity context, ArrayList<DtoAllMessages> list) { 
    super(context, R.layout.custom_list, list); 
    this.context=context; //added 
    this.userlist = list; 
    inflator = context.getLayoutInflater(); 
} 

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

    ViewHolder holder = null; 
    if (convertView == null) { 
     convertView = inflator.inflate(R.layout.custom_list, null); 
     holder = new ViewHolder(); 
     holder.title = (TextView) convertView.findViewById(R.id.tvName); 
     holder.date_cr = (TextView) convertView.findViewById(R.id.tvDate); 
     holder.img = (ImageView)convertView.findViewById(R.id.ivIcon); 
     holder.tokenBtn = (Button)convertView.findViewById(R.id.tokenBtn); 

     holder.tokenBtn.setOnClickListener((OnClickListener)context); //added portion 

     convertView.setTag(holder); 
     convertView.setTag(R.id.tvName, holder.title); 
     convertView.setTag(R.id.tvDate, holder.date_cr); 
     convertView.setTag(R.id.ivIcon,holder.img); 
     convertView.setTag(R.id.tokenBtn,holder.tokenBtn); 

    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    String token = userlist.get(position).getToken(); 

    Log.v("MessageList", "token:" + token); 

    token = token.substring(0,token.length()-3); 

    holder.title.setText(userlist.get(position).getName()+"("+token+")"); 

    String type_data = userlist.get(position).getType().toString(); 

    if((type_data.equals("text")) || (type_data.equals("photo"))) 
    { 
     Log.v("log", " if text photo "); 
     holder.date_cr.setText(userlist.get(position).getType()+":Received "+userlist.get(position).getCreated_date()); 
     holder.tokenBtn.setVisibility(View.VISIBLE); 
     list.setItemsCanFocus(true); 
    } 
    else if(type_data.equals("out")) 
    { 
     Log.v("log", " else out "); 
     holder.date_cr.setText(userlist.get(position).getType()+":Sent "+userlist.get(position).getCreated_date()); 
     holder.tokenBtn.setVisibility(View.GONE); 
    } 

    if(type_data.equals("text")) 
    { 
     Log.v("log", " if text "); 
     holder.img.setBackgroundResource(R.drawable.chatmessage); 

    } 
    else if(type_data.equals("photo")) 
    { 
     Log.v("log", " ese if photo "); 
     holder.img.setBackgroundResource(R.drawable.photomessage); 

    } 
    else if(type_data.equals("out")) 
    { 
     Log.v("log", " ese if out "); 
     holder.img.setBackgroundResource(R.drawable.outmessafe); 
    } 


    if(position%2==0) 
    { 
     convertView.setBackgroundResource(R.drawable.whitebackground); 
    } 
    else 
    { 
     convertView.setBackgroundResource(R.drawable.greybackground); 
    } 

    /*holder.tokenBtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Log.v("log_tag"," token button clicked"); 
     } 
    });*/ 


    return convertView; 
} 

class ViewHolder { 
    protected ImageView img; 
    protected TextView date_cr; 
    protected TextView title; 
    protected Button tokenBtn; 
} 
} 

和你的主类

public Main extends Activity implements OnClickListener{ 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.casual_layout); 

     Button tokenBtn=(Button)findViewById(R.id.tokenBtn); 
       tokenBtn.setOnClickListener(this); 
     } 
     public void onClick(View v) { 
    switch (v.getId()) { 
        case R.id.tokenBtn: 
        //Write a code here to execute alertdialog 
        Log.d("ALERT HERE","ALERT HERE"); 
        break; 
      } 
} 
0

您的适配器类,如果你想使用的Button代替TextView设置

android:focusable="false" 

到您的Button

相关问题