将单击侦听器添加到ListView中的按钮

时间:2017-09-10 12:30:55

标签: android listview

初学者。 我正在使用CursorAdapterListView。我每行有两个按钮(项目?)。我想向他们添加点击监听器,以便我可以隐藏/显示TextViews它在同一行。

这是我的适配器:

public class ToDoCursorAdapter extends CursorAdapter {
    public ToDoCursorAdapter(Context context, Cursor cursor) {
        super(context, cursor, 0);
    }

    // The newView method is used to inflate a new view and return it,
    // you don't bind any data to the view at this point.
    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        return LayoutInflater.from(context).inflate(R.layout.listview, parent, false);
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        TextView engText = (TextView) view.findViewById(R.id.engText);
        TextView arabText = (TextView) view.findViewById(R.id.arabText);
        TextView refText = (TextView) view.findViewById(R.id.refText);

        String arabic = cursor.getString(cursor.getColumnIndexOrThrow("PlainArab_Text"));
        String english = cursor.getString(cursor.getColumnIndexOrThrow("PlainEng_Text"));
        String ref = cursor.getString(cursor.getColumnIndexOrThrow("REF"));

        arabText.setText(arabic);
        engText.setText(english);
        refText.setText(ref);
    }
}

适配器xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/button"
            android:layout_width="0sp"
            android:layout_weight="0.5"
            android:layout_height="wrap_content"
            android:text="Left Button"
            />

        <Button
            android:id="@+id/button2"
            android:layout_width="0sp"
            android:layout_weight="0.5"
            android:layout_height="wrap_content"
            android:text="Right Button"
            />
    </LinearLayout>
    <TextView
        android:id="@+id/engText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="10sp"
        android:textSize="15sp"
        android:typeface="serif"/>

    <TextView
        android:id="@+id/arabText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="10sp"
        android:textSize="15sp"
        android:typeface="sans"
        />
    <TextView
        android:id="@+id/refText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="10sp"
        android:textSize="15sp" />
</LinearLayout>

活动代码:

public class ListViewActivity extends Activity {
    ListView listView ;
    private SQLiteDatabase hadlistDB;

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

        DatabaseHelper1 hadlistDBHelper;
        hadlistDBHelper = new DatabaseHelper1(this);

        try {
            hadlistDBHelper.createDataBase();
        }
        catch (IOException ioe)
        {
            throw new Error("Unable to create database");
        }
        hadlistDB =  hadlistDBHelper.openDataBase();

        Cursor todoCursor = hadlistDB.rawQuery("SELECT  ID as _id, * FROM HAD_TABLE WHERE ID < 5 ", null);

        // Find ListView to populate
        ListView lvItems = (ListView) findViewById(R.id.list);
// Setup cursor adapter using cursor from last step
        ToDoCursorAdapter todoAdapter = new ToDoCursorAdapter(this, todoCursor);
// Attach cursor adapter to the ListView
        lvItems.setAdapter(todoAdapter);

        todoAdapter.changeCursor(todoCursor);
    }

}

活动xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Top1" />


        <Button
            android:id="@+id/button4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Top2" />
    </LinearLayout>


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

如何将侦听器添加到适配器xml中的按钮?

3 个答案:

答案 0 :(得分:2)

在已在ToDoCursorAdapter类上覆盖的bindView方法上创建一个按钮对象然后使用findViewById,就像用于文本视图的其余部分来初始化对象一样,之后需要添加onClickListner在代码上做你想做的事情(比如隐藏textView)

public class ToDoCursorAdapter extends CursorAdapter {
public ToDoCursorAdapter(Context context, Cursor cursor) {
    super(context, cursor, 0);
}

// The newView method is used to inflate a new view and return it,
// you don't bind any data to the view at this point.
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    return LayoutInflater.from(context).inflate(R.layout.listview, parent, false);
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    TextView engText = (TextView) view.findViewById(R.id.engText);
    TextView arabText = (TextView) view.findViewById(R.id.arabText);
    TextView refText = (TextView) view.findViewById(R.id.refText);
    TextView refText = (TextView) view.findViewById(R.id.refText);
    Button button = (Button) view.findViewById(R.id.button);
    Button button2 = (Button) view.findViewById(R.id.button2);

    String arabic = cursor.getString(cursor.getColumnIndexOrThrow("PlainArab_Text"));
    String english = cursor.getString(cursor.getColumnIndexOrThrow("PlainEng_Text"));
    String ref = cursor.getString(cursor.getColumnIndexOrThrow("REF"));

    arabText.setText(arabic);
    engText.setText(english);
    refText.setText(ref);
    //updated
    arabText.setVisibility(View.VISIBLE);
    engText.setVisibility(View.VISIBLE);

    button.setOnClickListener(new View.OnClickListener() 
         { 
           @Override 
           public void onClick(View v){
           arabText.setVisibility(View.GONE);
         }

      });
    button2.setOnClickListener(new View.OnClickListener() 
        { 
           @Override 
           public void onClick(View v){
           engText.setVisibility(View.GONE);
         }
      });
 }
}

答案 1 :(得分:0)

bindView()方法中创建Button个对象并向其添加点击侦听器

 @Override public void bindView(View view, Context context, Cursor cursor) {   
     Button button= (Button) findViewById(R.id.buttonId); button.setOnClickListener(new View.OnClickListener() {   
            @Override public void onClick(View v) {   
              //your code here   
        }   
    });  
}

答案 2 :(得分:0)

创建一个Callback接口

public interface ButtonCallback{
     void onClickButton(View v);
     void onClickButton2(View v);
}

您的MainActivity实现了Callback接口

 public class ListViewActivity extends Activity implements ButtonCallback{
   ....
   public void onClickButton(View v){
      // do something
   }

   public void onClickButton2(View v){
      // do something
   }
 }

在适配器中,设置onclicklistener

@Override
public void bindView(View view, Context context, Cursor cursor) {
    TextView engText = (TextView) view.findViewById(R.id.engText);
    TextView arabText = (TextView) view.findViewById(R.id.arabText);
    TextView refText = (TextView) view.findViewById(R.id.refText);
    Button button = (TextView) view.findViewById(R.id.button);
    Button button2 = (TextView) view.findViewById(R.id.button2);

    String arabic = cursor.getString(cursor.getColumnIndexOrThrow("PlainArab_Text"));
    String english = cursor.getString(cursor.getColumnIndexOrThrow("PlainEng_Text"));
    String ref = cursor.getString(cursor.getColumnIndexOrThrow("REF"));

    arabText.setText(arabic);
    engText.setText(english);
    refText.setText(ref);

    button.setOnClickListenter(new View.OnClickListener({
        public void onCLick(View v){
             context.OnClickButton(v);
        }
    });

    button2.setOnClickListenter(new View.OnClickListener({
        public void onCLick(View v){
             context.OnClickButton2(v);
        }
    });
}