我的一个ListView数据绑定用的是BaseAdapter,
但是就是无法选中某一行!怎么办!怎么办!请各位前辈帮忙看看!
package test.com;import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;public class ListItemClick extends Activity{ ListView list01;
private DataBaseAdapter mMyAdapter;
String[] msgFirst1={
"01 第一行内容","02 第一行内容","03 第一行内容","04 第一行内容","05 第一行内容",
"06 第一行内容","07 第一行内容","08 第一行内容","09 第一行内容","10 第一行内容"};
String[] msgSecond1={
"01 第二行内容","02 第二行内容","03 第二行内容","04 第二行内容","05 第二行内容",
"06 第二行内容","07 第二行内容","08 第二行内容","09 第二行内容","10 第二行内容"};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.listitem);
list01=(ListView)findViewById(R.id.list01);
mMyAdapter = new DataBaseAdapter();
list01.setAdapter(mMyAdapter);
list01.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
Toast.makeText(ListItemClick.this, arg2, Toast.LENGTH_LONG).show();
//打断点也进入不了这行!
}
}); }
public class DataBaseAdapter extends BaseAdapter
{
/*ImageAdapter的构造符*/
public DataBaseAdapter()
{
}
@Override
public int getCount() {
return msgFirst1.length;
} /*一定要重写的方法getItem,传回position*/
@Override
public Object getItem(int position) {
return position;
} /*一定要重写的方法getItemId,传并position*/
@Override
public long getItemId(int position) {
return position;
} /*几定要重写的方法getView,传并几View对象*/
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View view;
view = getLayoutInflater().inflate(R.layout.list_linearlayout, null);
try {
ReferenceHolder holder = new ReferenceHolder(); holder.text1=(TextView)view.findViewById(R.id.txtLink1);//初始化TextView
holder.text2=(TextView)view.findViewById(R.id.txtLink2);//初始化TextView
holder.button=(Button)view.findViewById(R.id.btSelect01);//初始化Button
view.setTag(holder);
holder.text1.setText(msgFirst1[position]);//设置内容
holder.text1.setTextSize(16);//设置字体大小
holder.text1.setTextColor(Color.WHITE);//设置字体颜色
holder.text2.setText(msgSecond1[position]);//设置内容
holder.text2.setTextSize(16);//设置字体大小
holder.text2.setTextColor(Color.WHITE);//设置字体颜色
holder.button.setText("下载"); } catch (Exception e) {
Toast.makeText(ListItemClick.this, e.getMessage(),Toast.LENGTH_LONG).show();
}
return view;
}
}
class ReferenceHolder { public TextView text1;
public TextView text2;
public Button button;
public LinearLayout layout;
}}list_linearlayout.xml<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="fill_parent"
android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView android:id="@+id/imageView01" android:layout_width="35.0dip"
android:layout_height="40.0dip" android:scaleType="fitCenter"
android:layout_alignParentLeft="true" />
<TextView android:id="@+id/txtLink1"
android:paddingLeft="6.0dip" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_toRightOf="@id/imageView01" />
<TextView android:id="@+id/txtLink2"
android:paddingLeft="6.0dip" android:paddingBottom="8.0dip"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="-4.0dip" android:layout_toRightOf="@id/imageView01"
android:layout_below="@id/txtLink1" />
<TextView android:id="@+id/txtLink3"
android:paddingLeft="6.0dip" android:paddingBottom="8.0dip"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="-4.0dip" android:layout_toRightOf="@id/imageView01"
android:layout_below="@id/txtLink1" android:visibility="gone" />
<ImageView android:id="@+id/imageView02" android:layout_width="35.0dip"
android:layout_height="40.0dip" android:layout_marginLeft="180px" android:scaleType="fitCenter"
android:layout_alignParentLeft="true" android:layout_toRightOf="@id/imageView01" />
<Button android:id="@+id/btSelect01"
android:layout_marginLeft="230px" android:paddingBottom="4.0dip"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@id/imageView01" />
</RelativeLayout>listitem.xml<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
android:id="@+id/list01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="false"
android:scrollbars="vertical" />
</LinearLayout>
但是就是无法选中某一行!怎么办!怎么办!请各位前辈帮忙看看!
package test.com;import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;public class ListItemClick extends Activity{ ListView list01;
private DataBaseAdapter mMyAdapter;
String[] msgFirst1={
"01 第一行内容","02 第一行内容","03 第一行内容","04 第一行内容","05 第一行内容",
"06 第一行内容","07 第一行内容","08 第一行内容","09 第一行内容","10 第一行内容"};
String[] msgSecond1={
"01 第二行内容","02 第二行内容","03 第二行内容","04 第二行内容","05 第二行内容",
"06 第二行内容","07 第二行内容","08 第二行内容","09 第二行内容","10 第二行内容"};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.listitem);
list01=(ListView)findViewById(R.id.list01);
mMyAdapter = new DataBaseAdapter();
list01.setAdapter(mMyAdapter);
list01.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
Toast.makeText(ListItemClick.this, arg2, Toast.LENGTH_LONG).show();
//打断点也进入不了这行!
}
}); }
public class DataBaseAdapter extends BaseAdapter
{
/*ImageAdapter的构造符*/
public DataBaseAdapter()
{
}
@Override
public int getCount() {
return msgFirst1.length;
} /*一定要重写的方法getItem,传回position*/
@Override
public Object getItem(int position) {
return position;
} /*一定要重写的方法getItemId,传并position*/
@Override
public long getItemId(int position) {
return position;
} /*几定要重写的方法getView,传并几View对象*/
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View view;
view = getLayoutInflater().inflate(R.layout.list_linearlayout, null);
try {
ReferenceHolder holder = new ReferenceHolder(); holder.text1=(TextView)view.findViewById(R.id.txtLink1);//初始化TextView
holder.text2=(TextView)view.findViewById(R.id.txtLink2);//初始化TextView
holder.button=(Button)view.findViewById(R.id.btSelect01);//初始化Button
view.setTag(holder);
holder.text1.setText(msgFirst1[position]);//设置内容
holder.text1.setTextSize(16);//设置字体大小
holder.text1.setTextColor(Color.WHITE);//设置字体颜色
holder.text2.setText(msgSecond1[position]);//设置内容
holder.text2.setTextSize(16);//设置字体大小
holder.text2.setTextColor(Color.WHITE);//设置字体颜色
holder.button.setText("下载"); } catch (Exception e) {
Toast.makeText(ListItemClick.this, e.getMessage(),Toast.LENGTH_LONG).show();
}
return view;
}
}
class ReferenceHolder { public TextView text1;
public TextView text2;
public Button button;
public LinearLayout layout;
}}list_linearlayout.xml<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="fill_parent"
android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView android:id="@+id/imageView01" android:layout_width="35.0dip"
android:layout_height="40.0dip" android:scaleType="fitCenter"
android:layout_alignParentLeft="true" />
<TextView android:id="@+id/txtLink1"
android:paddingLeft="6.0dip" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_toRightOf="@id/imageView01" />
<TextView android:id="@+id/txtLink2"
android:paddingLeft="6.0dip" android:paddingBottom="8.0dip"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="-4.0dip" android:layout_toRightOf="@id/imageView01"
android:layout_below="@id/txtLink1" />
<TextView android:id="@+id/txtLink3"
android:paddingLeft="6.0dip" android:paddingBottom="8.0dip"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="-4.0dip" android:layout_toRightOf="@id/imageView01"
android:layout_below="@id/txtLink1" android:visibility="gone" />
<ImageView android:id="@+id/imageView02" android:layout_width="35.0dip"
android:layout_height="40.0dip" android:layout_marginLeft="180px" android:scaleType="fitCenter"
android:layout_alignParentLeft="true" android:layout_toRightOf="@id/imageView01" />
<Button android:id="@+id/btSelect01"
android:layout_marginLeft="230px" android:paddingBottom="4.0dip"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@id/imageView01" />
</RelativeLayout>listitem.xml<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
android:id="@+id/list01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="false"
android:scrollbars="vertical" />
</LinearLayout>
解决方案 »
- 求android电阻屏触摸校验源码或APK程序
- 【新手提问】view无法监听到onkeylistener。。
- 本人运用jlibrtp-0.2.2发送数据
- 出现错误“The application ...has stopped unexpectedly.”
- ImageView中设置点击点, 点击后有不同TEXT出现
- Android 2.2中的openCore ,支持的文件格式、音频格式和视频格式分别有哪些?
- android对socket的io操作也必须要在子线程中进行吗?
- 我如何让一个数值型EditText不能输入“0001.1”这种值
- android短信搜索
- 试问 AlertDialog中弹出第二层AlertDialog,其中糟糕的键盘处理问题?
- CameraHeadUpDisplay 能否动态改变菜单项的
- Service奇怪的生命周期:会被突然中断和重启
@Override
public Object getItem(int position) {
return position;
}这个地方你改一下试试:return msgFirst1[position];
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
}应该可以解决问题
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
Toast.makeText(ListMainActivity.this, position, Toast.LENGTH_LONG).show();
}
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
ReferenceHolder holder;
if (view == null){
view = getLayoutInflater().inflate(R.layout.list_linearlayout, null);
holder = new ReferenceHolder();
holder.text1=(TextView)view.findViewById(R.id.txtLink1);//初始化TextView
holder.text2=(TextView)view.findViewById(R.id.txtLink2);//初始化TextView
holder.button=(Button)view.findViewById(R.id.btSelect01);//初始化Button
view.setTag(holder);
} else {
holder = (ReferenceHolder) view.getTag();
}
holder.text1.setText(msgFirst1[position]);//设置内容
holder.text1.setTextSize(16);//设置字体大小
holder.text1.setTextColor(Color.WHITE);//设置字体颜色
holder.text2.setText(msgSecond1[position]);//设置内容
holder.text2.setTextSize(16);//设置字体大小
holder.text2.setTextColor(Color.WHITE);//设置字体颜色
holder.button.setText("下载");
return view;
}
package test.com;import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
public class ListItemClick extends Activity{ ListView list01;
private DataBaseAdapter mMyAdapter;
String[] msgFirst1={
"01 第一行内容","02 第一行内容","03 第一行内容","04 第一行内容","05 第一行内容",
"06 第一行内容","07 第一行内容","08 第一行内容","09 第一行内容","10 第一行内容"};
String[] msgSecond1={
"01 第二行内容","02 第二行内容","03 第二行内容","04 第二行内容","05 第二行内容",
"06 第二行内容","07 第二行内容","08 第二行内容","09 第二行内容","10 第二行内容"};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.listitem);
list01=(ListView)findViewById(R.id.list01);
mMyAdapter = new DataBaseAdapter();
list01.setAdapter(mMyAdapter);
list01.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
Toast.makeText(ListItemClick.this, arg2, Toast.LENGTH_LONG).show();
//打断点也进入不了这行!
}
}); }
public class DataBaseAdapter extends BaseAdapter
{
/*ImageAdapter的构造符*/
public DataBaseAdapter()
{
}
@Override
public int getCount() {
return msgFirst1.length;
} /*一定要重写的方法getItem,传回position*/
@Override
public Object getItem(int position) {
return position;
} /*一定要重写的方法getItemId,传并position*/
@Override
public long getItemId(int position) {
return position;
} /*几定要重写的方法getView,传并几View对象*/
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View view = convertView;
ReferenceHolder holder;
try {
if (view == null)
{
view = getLayoutInflater().inflate(R.layout.list_linearlayout, null);
holder = new ReferenceHolder();
holder.text1=(TextView)view.findViewById(R.id.txtLink1);//初始化TextView
holder.text2=(TextView)view.findViewById(R.id.txtLink2);//初始化TextView
holder.button=(Button)view.findViewById(R.id.btSelect01);//初始化Button
view.setTag(holder); } else {
holder = (ReferenceHolder) view.getTag();
} holder.text1.setText(msgFirst1[position]);//设置内容
holder.text1.setTextSize(16);//设置字体大小
holder.text1.setTextColor(Color.WHITE);//设置字体颜色
holder.text2.setText(msgSecond1[position]);//设置内容
holder.text2.setTextSize(16);//设置字体大小
holder.text2.setTextColor(Color.WHITE);//设置字体颜色
holder.button.setText("下载");
holder.layout=(RelativeLayout)view.findViewById(R.id.layout01); if (position % 2 == 0){
holder.layout.setBackgroundColor(Color.BLUE);
}else{
holder.layout.setBackgroundColor(Color.GREEN);
}
} catch (Exception e) {
Toast.makeText(ListItemClick.this, e.getMessage(),Toast.LENGTH_LONG).show();
}
return view;
} }
class ReferenceHolder { public TextView text1;
public TextView text2;
public Button button;
public RelativeLayout layout;
}}
android:focusable="false"
但是还是没反应啊!!
package test.com;import android.app.ListActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;public class ListViewActivity extends ListActivity { private DataBaseAdapter mMyAdapter;
String[] msgFirst1={
"01 第一行内容","02 第一行内容","03 第一行内容","04 第一行内容","05 第一行内容",
"06 第一行内容","07 第一行内容","08 第一行内容","09 第一行内容","10 第一行内容"};
String[] msgSecond1={
"01 第二行内容","02 第二行内容","03 第二行内容","04 第二行内容","05 第二行内容",
"06 第二行内容","07 第二行内容","08 第二行内容","09 第二行内容","10 第二行内容"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); // 关联Layout中的ListView
ListView vncListView = (ListView)findViewById(android.R.id.list);
mMyAdapter = new DataBaseAdapter();
vncListView.setAdapter(mMyAdapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
l.setBackgroundColor(Color.RED);//不管用!不管用!啊!!!
l.getItemAtPosition(position);
}
public class DataBaseAdapter extends BaseAdapter
{
public DataBaseAdapter()
{
}
@Override
public int getCount() {
return msgFirst1.length;
} @Override
public Object getItem(int position) {
return position;
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent)
{
View view = convertView;
ReferenceHolder holder;
try {
if (view == null)
{
view = getLayoutInflater().inflate(R.layout.list_linearlayout, null);
holder = new ReferenceHolder();
holder.text1=(TextView)view.findViewById(R.id.txtLink1);//初始化TextView
holder.text2=(TextView)view.findViewById(R.id.txtLink2);//初始化TextView
holder.button=(Button)view.findViewById(R.id.btSelect01);//初始化Button
view.setTag(holder); } else {
holder = (ReferenceHolder) view.getTag();
} holder.text1.setText(msgFirst1[position]);//设置内容
holder.text1.setTextSize(16);//设置字体大小
holder.text1.setTextColor(Color.WHITE);//设置字体颜色
holder.text2.setText(msgSecond1[position]);//设置内容
holder.text2.setTextSize(16);//设置字体大小
holder.text2.setTextColor(Color.WHITE);//设置字体颜色
holder.button.setText("下载");
final int row_num=position;
holder.button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(ListViewActivity.this,"点击第 "+row_num+" 行!",Toast.LENGTH_LONG).show();
}
});
holder.layout=(RelativeLayout)view.findViewById(R.id.layout01); if (position % 2 == 0){
holder.layout.setBackgroundColor(Color.BLUE);
}else{
holder.layout.setBackgroundColor(Color.GREEN);
}
} catch (Exception e) {
Toast.makeText(ListViewActivity.this, e.getMessage(),Toast.LENGTH_LONG).show();
}
return view; }
}
class ReferenceHolder { public TextView text1;
public TextView text2;
public Button button;
public RelativeLayout layout;
}
}
list_linearlayout.xml<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="fill_parent" android:id="@+id/layout01"
android:layout_height="wrap_content" android:descendantFocusability="blocksDescendants"
xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView android:id="@+id/imageView01" android:layout_width="35.0dip"
android:layout_height="40.0dip" android:scaleType="fitCenter"
android:layout_alignParentLeft="true" />
<TextView android:id="@+id/txtLink1"
android:paddingLeft="6.0dip" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_toRightOf="@id/imageView01" />
<TextView android:id="@+id/txtLink2"
android:paddingLeft="6.0dip" android:paddingBottom="8.0dip"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="-4.0dip" android:layout_toRightOf="@id/imageView01"
android:layout_below="@id/txtLink1" />
<TextView android:id="@+id/txtLink3"
android:paddingLeft="6.0dip" android:paddingBottom="8.0dip"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="-4.0dip" android:layout_toRightOf="@id/imageView01"
android:layout_below="@id/txtLink1" android:visibility="gone" />
<ImageView android:id="@+id/imageView02" android:layout_width="35.0dip"
android:layout_height="40.0dip" android:layout_marginLeft="180px" android:scaleType="fitCenter"
android:layout_alignParentLeft="true" android:layout_toRightOf="@id/imageView01" />
<Button android:id="@+id/btSelect01"
android:layout_marginLeft="230px" android:paddingBottom="4.0dip"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:focusable="false" android:layout_toRightOf="@id/imageView01" />
</RelativeLayout>
自定义ListView的ListItem的布局时,如果布局中有多选,单选,或者button时,必须设置布局属性android:descendantFocusability="blocksDescendants"并且把按钮的onfoucus属性设置为false,不然Listitem的onclick事件将失效,应为Listitem的onclick事件优先级低于button的onclick事件。
恭喜楼主解决问题。
@Override
protected void onListItemClick(ListView arg0, View v, int position, long id) {
super.onListItemClick(arg0, v, position, id);
arg0.getItemAtPosition(position);
//怎么获得列表里的TextView内容那!或者绑定的数据内容
Toast.makeText(ListViewActivity.this,"点击第 "+(position+1)+" 行!",Toast.LENGTH_SHORT).show();
}
或者,知道当前点击的position,再取得第一个可见的item位置,通过两者之差,找到相对index,然后通过listview的getChildAt(index)也可以找到你的TextView,参考。
int visStart = listMusic.getFirstVisiblePosition();
int visEnd = listMusic.getLastVisiblePosition();
TextView tvTitle, tvSinger, tvTextt;
int index = position - visStart;
if ( index >= 0 && index <= visEnd - visStart) {
tvTitle = (TextView)(listMusic.getChildAt(index).findViewById(R.id.ItemTitle));
Toast.makeText(ListViewActivity.this,"您选择的是: "+ msgFirst1[position],Toast.LENGTH_SHORT).show();
{
View view = super.getView(position,convertView,parent) holder.text1=(TextView)view.findViewById(R.id.txtLink1);//初始化TextView}