listview项目无法在android中单击

时间:2015-02-22 15:16:02

标签: android listview togglebutton

我创建了自定义列表视图,我添加了一个onclick监听器,但它无法正常工作。以下是我的代码

这是我的MainActivity类:

public class MainActivity extends Activity  {
    public boolean[] status;
    ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_main);
    // Attach the adapter to a ListView
                listView = (ListView) findViewById(R.id.lvUsers);
    populateUsersList();

    listView.setOnItemClickListener(new OnItemClickListener() {
         public void onItemClick(AdapterView<?> parent, android.view.View view, int position, long id) {
              Toast.makeText(getBaseContext(),"Hello", Toast.LENGTH_SHORT).show();
         }
         });

    }

    private void populateUsersList() {
        // Construct the data source
        ArrayList<User> arrayOfUsers = User.getUsers();
        // Create the adapter to convert the array to views
        CustomUsersAdapter adapter = new CustomUsersAdapter(this,  arrayOfUsers);


        listView.setAdapter(adapter);
    }


   }

这是我的适配器类:

public class CustomUsersAdapter extends ArrayAdapter<User> {
        public CustomUsersAdapter(Context context, ArrayList<User> users) {
            super(context, 0, users);
        }

 @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    // Get the data item for this position
    User user = getItem(position);    
    // Check if an existing view is being reused, otherwise inflate the view
    if (convertView == null) {
       convertView = LayoutInflater.from(getContext()).inflate(R.layout.activity_main, parent, false);
    }
    // Lookup view for data population
    TextView tvName = (TextView) convertView.findViewById(R.id.tvName);
    TextView tvHome = (TextView) convertView.findViewById(R.id.tvHometown);
    ToggleButton tgbtn = (ToggleButton)     convertView.findViewById(R.id.toggleButton1);
    // Populate the data into the template view using the data object
    tvName.setText(user.name);
    tvHome.setText(user.hometown);

    // Return the completed view to render on screen
    return convertView;
        }
    }

我希望在选中相应的切换按钮时从列表视图中获取值。并且想要保存切换按钮的值以及arraylist中的相应文本。

这是我的xml:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >

   <ListView
    android:id="@+id/lvUsers"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
  />

 </LinearLayout>

这是我的第二个xml:

  <?xml version="1.0" encoding="utf-8"?>
   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:padding="10dp"
    >

   <TextView
    android:id="@+id/tvName"
    android:layout_alignBaseline="@+id/ivUserIcon"
    android:layout_toRightOf="@+id/ivUserIcon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingLeft="10dp"
    android:paddingRight="6dp"
    android:text="Sarah"
    android:textAppearance="?android:attr/textAppearanceLarge" />

  <TextView
    android:id="@+id/tvHometown"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/tvName"
    android:layout_below="@+id/tvName"
    android:text="San Marco"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<ToggleButton
    android:id="@+id/toggleButton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignTop="@+id/tvName"
    android:layout_marginRight="15dp"
    android:text="ToggleButton" />

   </RelativeLayout>

3 个答案:

答案 0 :(得分:1)

RelativeLayout更改为

<RelativeLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:padding="10dp"
 android:descendantFocusability="blocksDescendants"
>
  

此视图将阻止其任何后代获得焦点,即使它们是可聚焦的。

答案 1 :(得分:0)

您必须设置onclicklistener按钮。

tgbtn.setOnClickListener(new OnClickListener(position));

不知道它有效但尝试这样的事情:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get the data item for this position
User user = getItem(position);    
// Check if an existing view is being reused, otherwise inflate the view
if (convertView == null) {
   convertView = LayoutInflater.from(getContext()).inflate(R.layout.activity_main, parent, false);
}
// Lookup view for data population
TextView tvName = (TextView) convertView.findViewById(R.id.tvName);
TextView tvHome = (TextView) convertView.findViewById(R.id.tvHometown);
ToggleButton tgbtn = (ToggleButton)     convertView.findViewById(R.id.toggleButton1);
// Populate the data into the template view using the data object
tvName.setText(user.name);
tvHome.setText(user.hometown);
tgbtn.setOnClickListener(new OnButtonClickListener(position));
// Return the completed view to render on screen
return convertView;
    }

然后是Button Click的一个类:

private class OnButtonClickListener implements OnClickListener {

    int _postion;

    // constructor
    public OnButtonClickListener(int position) {
        this._postion = position;
    }

    @Override
    public void onClick(View v) {

    }

}

答案 2 :(得分:0)

在你的代码下面有一个ListView,你想点击该功能到列表项,写下这段代码。

 public void onListItemClick(ListView parent, View v, int position, long id){
        // do something here
        // Example below make a toast message
        Toast.makeText(getApplicationContext(), "I clicked item of list number " + position,Toast.LENGTH_SHORT).show();
 }