how to make textview of the listview clickable

2019-02-28 22:50发布

问题:

I have a customized listview contains of some Textviews. I set the list view to the adapter as follows:

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

and as shown below in the code of the bestand_type_liste layout the TextView is clickable

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"/>  <<=================

In the getView() method of the adapter i am using onClickListener associated to the name TexView so that when the name is clicked its position is displayed on the logCat as follows:

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

the problem is, when I click on the listview item nothing appears, how to solve this issue

回答1:

Just try to add this attribute for the TextView:

android:focusable="false"


回答2:

Example for Array adapter , this one is main activity.

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

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;
}

}