2016-04-08 8 views
-1

button.textプロパティにsqliteデータベースの複数の子名が設定されたボタンがいくつかあるリストビューがあります。リストビュー内のボタンのonclickをフラグメント内に取得

子供のボタンがクリックされたとき(各ボタンのテキストプロパティ(子の名前が入力されている可能性があります)を使用している可能性があります)に割り当てられたタスクを取得する必要があります。

私は(ChildDatabase、ChildListAdapter、ChildList)と2つのXMLファイル(fragment_child_list_layout、fragment_child_list)を使って作業している3つのjavaファイルを持っています。

ここでは、リストビューのボタンのonClickイベントを設定できます。 ONE BUTTONだけが解除されていれば、どのように各ボタンと区別できますか?

これはこれは、異なるテキストプロパティで何度も同じボタン私ChildListAdapter 表示され

package com.example.victor.kidsrewards; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.List; 

/** 
* Created by Victor on 4/3/2016. 
*/ 
public class ChildListAdapter extends ArrayAdapter<ChildUser> { 

    private final Context context; 

    private final List<ChildUser> childList; 

    public ChildListAdapter(Context context, List<ChildUser> childList){ 
     super(context, R.layout.fragment_child_list_layout, childList);//fragment_child_list 
     this.context = context; 
     this.childList= childList; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent){ 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View rowView = inflater.inflate(R.layout.fragment_child_list_layout,parent,false); 


     Button childName = (Button)rowView.findViewById(R.id.childButton); 
     childName.setText(childList.get(position).getNickName()); 




     return rowView; 
    } 

私ChildDatabaseファイル

package com.example.victor.kidsrewards; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 

import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by Victor on 4/3/2016. 
*/ 
public class ChildDataBase { 
    private SQLiteDatabase db; 
    private ChildSQLiteHelper childSQLiteHelper; 
    String _parentName = Globals._username; 

    public ChildDataBase(Context context) { 
     childSQLiteHelper = new ChildSQLiteHelper(context); 
     db = childSQLiteHelper.getWritableDatabase(); 
    } 

    public void Close() { 
     db.close(); 
    } 

    public void createChild(String childNameText, String nickNameText, String genderText, int ageText) { 

     String query = "select * from child"; 
     Cursor cursor = db.rawQuery(query, null); 
     int count = cursor.getCount(); 

     ContentValues contentValues = new ContentValues(); 
     contentValues.put("id", count); 
     contentValues.put("childname", childNameText); 
     contentValues.put("nickname", nickNameText); 
     contentValues.put("age", ageText); 
     contentValues.put("gender", genderText); 
     contentValues.put("parent", _parentName); 

     //insert 
     db.insert("child", null, contentValues); 

    } 

    public List<ChildUser> getChildren() { 
     List<ChildUser> childList = new ArrayList<ChildUser>(); 

     //select columns 
     String[] tableColumns = new String[]{"id", "childname", "nickname"}; 

     Cursor cursor = db.query("child", tableColumns, "parent =? ", new String[]{_parentName}, null, null, null); 
     cursor.moveToFirst(); 

     while (!cursor.isAfterLast()) { 
      ChildUser child = new ChildUser(); 
      //take values from database 
      child.setId(cursor.getInt(0)); 
      child.setChildName(cursor.getString(1)); 
      child.setNickName(cursor.getString(2)); 


      //add to db 
      childList.add(child); 

      cursor.moveToNext(); 
     } 
     return childList; 
    } 

    public String[] getChildNames() { 
     String[] tableColumns = new String[]{"childname"}; 

     Cursor cursor = db.query("child", tableColumns, "parent =?", new String[]{_parentName}, null, null, null); 
     String[] array = new String[cursor.getCount()];//sets the length of the array 
     int i = 0; 
     while (cursor.moveToNext()) { 
      String uname = cursor.getString(cursor.getColumnIndex("childname")); 
      array[i] = uname; 
      i++; 
     } 

     return array; 
    } 
} 

あるたchildListクラス

package com.example.victor.kidsrewards; 

import android.content.Context; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.Settings; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.ListFragment; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 


public class ChildList extends ListFragment { 


    private ChildDataBase cdb; 

    public ChildList() { 
     // Required empty public constructor 
    } 





    /* @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    }*/ 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_child_list, container, false); 


    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 


     cdb = new ChildDataBase(getContext()); 


     setListAdapter(new ChildListAdapter(getContext(), cdb.getChildren())); 


    } 


    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 

    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 

    } 

} 





    } 

fragment_child_list_layout.xml

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



    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="New Button" 
     android:id="@+id/childButton" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="10dp" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentStart="true" 
     android:layout_marginTop="15dp" /> 


</RelativeLayout> 

fragment_child_list.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.victor.kidsrewards.ChildList"> 

    <!-- TODO: Update blank fragment layout --> 
    <ListView 
     android:id="@id/android:list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textColor="#000" 
     android:text="TODO TEXT GOES_HERE"> 
    </ListView> 

</FrameLayout> 
+0

なぜ__JavaScript__ですか? – Rayon

+0

これは私の最初のプログラミングプロジェクトです。私は実際にはどの言語が最高であるかを知りませんでした。 – vhdz04

答えて

0

あなたは、アダプタのgetView()メソッド内ButtonためOnClickListenerを設定することができます。 position引数は、どのボタンがクリックされたかを識別するために使用できます。

コードを見る、

@Override 
public View getView(final int position, View convertView, ViewGroup parent){ 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View rowView = inflater.inflate(R.layout.fragment_child_list_layout,parent,false); 

    Button childName = (Button)rowView.findViewById(R.id.childButton); 
    childName.setText(childList.get(position).getNickName()); 

    childName.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      String selectedChild = childList.get(position).getNickName(); 
      // do something with selected item 

     } 
    }); 


    return rowView; 
} 
+0

'position'を' final'にしました。 'getView()' - > 'final int position'の引数を参照してください。 –

+0

ありがとうございました。私は似たようなことをしていましたが、childname.serOnClickListnereに "childname"がありませんでした。私は非常に助けを感謝します。 – vhdz04

+0

@ vhdz04 clicklistenerは 'Button childName'にあります。 Nはキャップです。 –

0

@Override パブリックビューgetViewメソッド(INT位置、表示convertView、のViewGroup親){ LayoutInflaterインフレータ=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)。

View rowView = inflater.inflate(R.layout.fragment_child_list_layout,parent,false); 


    Button childName = (Button)rowView.findViewById(R.id.childButton); 
    childName.setText(childList.get(position).getNickName()); 
    childName.setOncLickListener(new OnclickListener() { 
     public void onClick() { 
      // do something for click each row 
     } 
    return rowView; 
} 
関連する問題