2

我有三列自定义列表视图,如数量、项目、价格。如果在自定义列表中使用 textView 显示三列,它的可点击工作正常。但是如果我使用两个 textView 和一个 editText,那么我无法单击该项目。我只能编辑editText 字段。但不能点击。

   public class TicketActivity extends Activity{
TextView t1;
TextView t2;
ListView l1;
TextView t6;
    public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.ticket);
t1=(TextView)findViewById(R.id.textView3);
t2=(TextView)findViewById(R.id.textView5);
l1=(ListView)findViewById(R.id.listView1);

   //Get the Table no Value From Edit Text


Intent i1=getIntent();
Bundle b=i1.getExtras();
int num=b.getInt("Table No:");
    String pno=Integer.toString(num);
    t1.setText(pno);

        //Get The Guest Value From Edit Text

    Intent i2=getIntent();
    Bundle b1=i2.getExtras();
    int num1=b1.getInt("Guest:");
    String pno1=Integer.toString(num1);
    t2.setText(pno1);


     // List<String> st=GlobalClass.myval;

       //ArrayAdapter<String> ada = new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1,st);

       l1.setAdapter(new EfficientAdapter(TicketActivity.this));
     l1.setOnItemClickListener(new OnItemClickListener(){
   public void onItemClick(AdapterView<?> parent,View view,int position,long id){


       String[] s1 = (String[]) parent.getItemAtPosition(position);



       Toast.makeText(getApplicationContext(), "Selected:"+ s1,Toast.LENGTH_SHORT).show();
   }
       });
      } 
   private static class EfficientAdapter extends BaseAdapter{
    private LayoutInflater mInflater;



    public EfficientAdapter(Context context){
        mInflater=LayoutInflater.from(context);

    // implementation of EfficientAdapter   
    }
    public int getCount() {

        return GlobalClass.myval.size();//<GlobalClass.myvals.size()?GlobalClass.myval.size():GlobalClass.myvals.size();

    }
    public Object getItem(int position) {

        return position;
    }
    public long getItemId(int position) {

        return position ;
    }
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        String[] stockArr = new String[GlobalClass.myval.size()];
        stockArr = GlobalClass.myval.toArray(stockArr);
        String[] stockArr1=new String[GlobalClass.myvals.size()];
        stockArr1=GlobalClass.myvals.toArray(stockArr1);
    if(convertView==null){
            convertView=mInflater.inflate(R.layout.list_ticket, null);
            holder=new ViewHolder();
            holder.Text1=(EditText) convertView.findViewById(R.id.editText1);
            holder.Text2=(TextView) convertView.findViewById(R.id.textView2);
            holder.Text3=(TextView) convertView.findViewById(R.id.textView3);
            convertView.setTag(holder);
        }
        else{
              holder=(ViewHolder)convertView.getTag();
            }
           holder.Text1.setText("1");
            holder.Text2.setText(stockArr[position]);
            holder.Text3.setText(stockArr1[position]);
            return convertView;

     }

    }
    static class ViewHolder{
        EditText Text1;
        TextView Text2;
        TextView Text3;

    }

      }
4

2 回答 2

0

在你的 onCreate() 中试试这个:

l1.setItemsCanFocus(true);

请注意,这必须在该行之后完成

l1=(ListView)findViewById(R.id.listView1);

否则你会得到一个 NullPointerException。

既然您已经告诉您的 ListView “让您的项目集中”,您必须在您的孩子中使用

// In items of your ListView
setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        // TODO: handle focus here

    }
});
于 2012-08-07T14:00:37.953 回答
0

你可以尝试弄乱

setItemsCanFocus(true)

这将让您控制您的适配器或子视图是否获得点击事件。 这是文档

于 2012-08-07T13:49:03.630 回答