2015-04-24 44 views
0

我使用FrameLayout作爲自定義列表項。我有一個onItemClickListener設置爲listView,但每個項目都有一個按鈕,而它們中的按鈕是可點擊的,而項目本身不是,它們應該做不同的事情。我該如何製作該項目以及其內的按鈕都可點擊?小部件內部的小部件不按預期工作

下面的代碼:

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

import java.util.ArrayList; 

public class ProjectCreateScreen extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.secondary_layout1); 

    final TextView noProject = (TextView) findViewById(R.id.NOPROJECT); 
    Button btn = (Button) findViewById(R.id.addBtn); 

    final ArrayList<String> listItems=new ArrayList<String>(); 
    final ListAdapter addAdapter = new ArrayAdapter<String>(this, 
      R.layout.list_item, R.id.listFrame, listItems); 
    final ListView lv = (ListView) findViewById(R.id.lv); 
    lv.setAdapter(addAdapter); 

    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      noProject.setVisibility(View.GONE); 
      lv.setVisibility(View.VISIBLE); 
      listItems.add("New Project"); 
      ((ArrayAdapter) addAdapter).notifyDataSetChanged(); 
     } 
    }); 

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Intent switchToEdit = new Intent(ProjectCreateScreen.this, 
        teamCreateScreen.class); 
      startActivity(switchToEdit); 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 

} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
} 

自定義列表視圖項的xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 

    <TextView 
     android:id="@+id/listFrame" 
     android:layout_width="wrap_content" 
     android:layout_height="80dp" 
     android:textSize="20sp" 
     /> 

    <Button android:id="@+id/frameBtn" 
     android:layout_width="30dp" 
     android:layout_height="30dp" 
     android:layout_gravity="top|right" 
     /> 

</FrameLayout> 

活動的XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/rl"> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="60dp" 
    android:text="@string/AddProject" 
    android:id="@+id/addBtn" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" /> 

<TextView 
    android:layout_width="200dp" 
    android:layout_height="wrap_content" 
    android:text="@string/noProjectsNotice" 
    android:id="@+id/NOPROJECT" 
    android:gravity="center" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:textSize="16sp"/> 

<ListView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/addBtn" 
    android:id="@+id/lv" 
    android:visibility="invisible"> 
</ListView> 

</RelativeLayout> 

回答

2

添加任何視圖以下兩個屬性你想要在列表視圖中點擊:

android:focusable="false" 
android:focusableInTouchMode="false" 

這應該可以解決大多數情況。如果這還不夠,還要將以下屬性添加到列表視圖佈局的根佈局中

android:descendantFocusability="blocksDescendants" 
+0

謝謝,這已經成功了! :) – Richard

相關問題