如何使listview的textview可点击

时间:2016-09-23 10:49:45

标签: android listview textview baseadapter

我有自定义的listview包含一些Textviews。我将列表视图设置为adapter,如下所示:

BestandTypAdapter bestandTypAdapter = new BestandTypAdapter(getActivity(), R.layout.bestand_type_liste, dataList);
li.setAdapter(bestandTypAdapter);

并且如下所示,在bestand_type_liste布局的代码中,TextView是可点击的

bestand_type_liste

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/layout_depots_typ"
android:padding="5dip" >

<TableRow
    android:paddingRight="10dip"
     android:paddingLeft="10dip"
    >

    <TextView
        android:id="@+id/BESTAND_TYP_NAME"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:layout_weight="0.50"
        android:clickable="true"/>  <<=================

getView() adapter方法中,我使用onClickListener与名称TexView相关联,以便在点击名称时,其位置会显示在logCat上1}}如下:

holder.name.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.i("", "position_ : " + pos);
            }
        });

问题是,当我点击listview项时没有出现,如何解决这个问题

2 个答案:

答案 0 :(得分:1)

尝试为TextView添加此属性:

android:focusable="false"

答案 1 :(得分:0)

数组适配器的示例,这是主要活动。

public class ListViewMain extends AppCompatActivity {
private ArrayList<BrandModel> alBrand;
private ListView list;
private CustomAdapter custAdapter;
private AdapterView.OnItemClickListener messageClickedHandler;
private View vHeader;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    init();
    setupDefaults();
    setupEvents();
}

public void init() {
    //list view
    list = (ListView) findViewById(R.id.listView);
    //Array list
    alBrand = new ArrayList<>();
    //Custom Adapter
    custAdapter = new CustomAdapter(this, R.layout.textlistview, alBrand);
    //View
    vHeader = getLayoutInflater().inflate(R.layout.listviewheader, null, false);
}

public void setupDefaults() {
    addBrandAndAdapter();
}

public void addBrandAndAdapter() {
    alBrand.add(new BrandModel(getResources().getString(R.string.And), R.drawable.android));
    alBrand.add(new BrandModel(getResources().getString(R.string.Mac), R.drawable.apple));
    alBrand.add(new BrandModel(getResources().getString(R.string.Tizen), R.drawable.insta));
    alBrand.add(new BrandModel(getResources().getString(R.string.window), R.drawable.windows));
    list.addHeaderView(vHeader);
    list.setAdapter(custAdapter);
}

public void setupEvents() {
    messageClickedHandler = new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView parent, View view, int position, long id) {
            Toast.makeText(getApplicationContext(), "Click ListItem Number " + position, Toast.LENGTH_LONG).show();
            System.out.println("Selected");
        }
    };
    list.setOnItemClickListener(messageClickedHandler);
}

}

  1. Arrayadapter
  2. public class CustomAdapter extends ArrayAdapter<BrandModel> {
    ArrayList<BrandModel> alBrand = new ArrayList<>();
    
    public CustomAdapter(Context context, int tvResId, ArrayList<BrandModel> alObjects) {
        super(context, tvResId, alObjects);
        alBrand = alObjects;
    }
    
    @Override
    public int getCount() {
        return super.getCount();
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View add = convertView;
        BrandHolder holder = null;
        if (add == null) {
            LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            add = inflater.inflate(R.layout.textlistview, null);
            holder = new BrandHolder();
            holder.tvName = (TextView) add.findViewById(R.id.tvName);
            holder.ivImage = (ImageView) add.findViewById(R.id.ivIcon);
            add.setTag(holder);
    
        } else {
            holder = (BrandHolder) add.getTag();
        }
        holder.tvName.setText(alBrand.get(position).getStrBrdName());
        holder.ivImage.setImageResource(alBrand.get(position).getImgBrdLogo());
        return add;
    }
    
    static class BrandHolder {
        TextView tvName;
        ImageView ivImage;
    }
    

    }