如果列表项有链接,setOnItemClickListener 不起作用
Posted
技术标签:
【中文标题】如果列表项有链接,setOnItemClickListener 不起作用【英文标题】:setOnItemClickListener not working if the list item has a link 【发布时间】:2015-10-04 11:15:21 【问题描述】:我有一个列表视图,此列表视图包含带有链接的列表项(自定义布局),如果我单击链接,则文本视图不可点击,我希望 textview 和链接都可点击我已添加所有内容,例如
android:descendantFocusability="blocksDescendants"
android:focusable="false"
android:focusableInTouchMode="false"
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:descendantFocusability="blocksDescendants" >
<TextView
android:id="@+id/item"
android:layout_
android:layout_
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:focusable="false"
android:focusableInTouchMode="false"
android:textSize="28sp" />
这是我的 xml 文件 没有任何工作 提前致谢
【问题讨论】:
更新了我的问题并添加了xml 如果你使用 recyclerview 会有所帮助,它不会窃取你的注意力:o 【参考方案1】:我已经为你写了一些例子。
MainActivity2Activity.java
:
public class MainActivity2Activity extends AppCompatActivity
Spanned[] data = new Spanned[]
html.fromHtml("Some text and link: www.google.com Google"),
Html.fromHtml("Some text and link: www.google.com Google"),
Html.fromHtml("Some text and link: www.google.com Google");
ListView mListView;
ArrayAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_activity2);
mListView = (ListView) findViewById(R.id.list_view);
mAdapter = new MyAdapter(this, data);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id)
Toast.makeText(view.getContext(),"Item at position: " + position, Toast.LENGTH_SHORT).show();
);
public static class MyAdapter extends ArrayAdapter<Spanned>
private Context mContext;
private Spanned[] mData;
public MyAdapter(Context context, Spanned[] data)
super(context, -1, data);
mContext = context;
mData = data;
@Override
public View getView(int position, View convertView, ViewGroup parent)
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.link_listview_item, parent, false);
((TextView)view.findViewById(R.id.item)).setText(mData[position]);
((TextView)view.findViewById(R.id.item)).setTag(position);
((TextView)view.findViewById(R.id.item)).setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
Toast.makeText(view.getContext(), "TextView click at position: " + (Integer) view.getTag(), Toast.LENGTH_SHORT).show();
);
return view;
activity_main_activity2.xml
:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
tools:context="com.dinamicgridview.app.MainActivity2Activity">
<ListView
android:layout_
android:layout_
android:id="@+id/list_view" />
</RelativeLayout>
link_listview_item.xml
:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:http="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_
android:focusable="false"
android:descendantFocusability="blocksDescendants">
<TextView
android:id="@+id/item"
android:layout_
android:layout_
android:layout_alignParentTop="true"
android:linksClickable="true"
android:clickable="true"
android:textSize="28sp"
android:autoLink="web"
android:focusable="false"
android:focusableInTouchMode="false"
android:text="Some text"/>
<Space
android:layout_
android:layout_
android:layout_below="@+id/item"
android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false"
android:id="@+id/space"/>
</RelativeLayout>
演示
点击文字: 点击链接: 点击项目:
【讨论】:
感谢@Alexander 链接是可点击的,但我需要文本与列表视图中的链接一起可点击 @Alexander 在字符串上获取 PositionData 然后转到新活动或转到 url @amitsharma,我的回答有什么问题?如您所见,一切正常。请更详细地描述您的问题 Alexander 对不起,我是为@Ghouse Pasha 写的,只是发生错误,你的回答没有问题.. @Alexander 不需要大量代码和堆栈快照您是否有空工作或喜欢详细描述...【参考方案2】:试试这个代码,它可能会帮助你这是一个小代码来做它
final ListView lv = (ListView) findViewById(R.id.ListView01);
lv.setOnItemClickListener(new OnItemClickListener()
public void onItemClick(AdapterView<?> myAdapter, View myView, int pos, long
mylng)
String selectedFromList =(lv.getItemAtPosition(pos).toString());
URL url;
Uri uri;
try
url = new URL(selectedFromList );
uri = Uri.parse( url.toURI().toString() );
catch (MalformedURLException e1)
e1.printStackTrace();
catch (URISyntaxException e)
e.printStackTrace();
);
【讨论】:
以上是关于如果列表项有链接,setOnItemClickListener 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Cloud Formation 模板中使列表项有条件?
item的Ontouch和listview的setOnItemClick冲突求解。