2016-11-04 10 views
-1

基本的に私のフラグメントレイアウトにはリストビューがあります。そして、私のボタンを含むitem_todo.xmlと呼ばれる別のレイアウト。 レイアウトでdelete_taskボタンをクリックしている間にonClick()が機能しませんでした。 あなたが私を助けることができれば素晴らしいだろう!ここでonClickはフラグメント内では機能しません

は私のクラスToDoFragmentが

public class ToDoFragment extends Fragment { 

    private static final String TAG = "MainActivity"; 
    private TaskDbHelper mHelper; 
    private ListView mTaskListView; 
    private ArrayAdapter<String> mAdapter; 
    Button myButton; 
    FloatingActionButton btnadd; 
    //Overriden method onCreateView 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_two, container, false); 



     mHelper = new TaskDbHelper(getActivity()); 
     mTaskListView = (ListView) view.findViewById(R.id.list_todo); 

     //Floating action button 

     btnadd = (FloatingActionButton) view.findViewById(R.id.btnadd); 
     btnadd.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       final EditText taskEditText = new EditText(getActivity()); 
       AlertDialog dialog = new AlertDialog.Builder(getActivity()) 
         .setTitle("Add a new task") 
         .setMessage("What do you want to do next?") 
         .setView(taskEditText) 
         .setPositiveButton("Add", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           String task = String.valueOf(taskEditText.getText()); 
           SQLiteDatabase db = mHelper.getWritableDatabase(); 
           ContentValues values = new ContentValues(); 
           values.put(TaskContract.TaskEntry.COL_TASK_TITLE, task); 
           db.insertWithOnConflict(TaskContract.TaskEntry.TABLE, 
             null, 
             values, 
             SQLiteDatabase.CONFLICT_REPLACE); 
           db.close(); 
           updateUI(); 
          } 
         }) 
         .setNegativeButton("Cancel", null) 
         .create(); 
       dialog.show(); 
      } 
     }); 


     updateUI(); 
     return view; 
    } 

    @Override 
    public void onActivityCreated(Bundle saved){ 
     super.onActivityCreated(saved); 
     final LayoutInflater factory = getActivity().getLayoutInflater(); 
     final View textEntryView = factory.inflate(R.layout.item_todo, null); 
     myButton = (Button) textEntryView.findViewById(R.id.task_delete); 
     myButton.setOnClickListener(new View.OnClickListener() { 
      // OnClick() Not Working !! 

      @Override 
      public void onClick(View view) { 

       deleteTask(view); 
      } 
     }); 
    } 

    public void deleteTask(View view) { 
     View parent = (View) view.getParent(); 
     TextView taskTextView = (TextView) parent.findViewById(R.id.task_title); 
     String task = String.valueOf(taskTextView.getText()); 
     SQLiteDatabase db = mHelper.getWritableDatabase(); 
     db.delete(TaskContract.TaskEntry.TABLE, 
       TaskContract.TaskEntry.COL_TASK_TITLE + " = ?", 
       new String[]{task}); 
     db.close(); 
     updateUI(); 
    } 


    private void updateUI() { 
     ArrayList<String> taskList = new ArrayList<>(); 
     SQLiteDatabase db = mHelper.getReadableDatabase(); 
     Cursor cursor = db.query(TaskContract.TaskEntry.TABLE, 
       new String[]{TaskContract.TaskEntry._ID, TaskContract.TaskEntry.COL_TASK_TITLE}, 
       null, null, null, null, null); 
     while (cursor.moveToNext()) { 
      int idx = cursor.getColumnIndex(TaskContract.TaskEntry.COL_TASK_TITLE); 
      taskList.add(cursor.getString(idx)); 
     } 

     if (mAdapter == null) { 
      mAdapter = new ArrayAdapter<>(getActivity(), 
        R.layout.item_todo, 
        R.id.task_title, 
        taskList); 
      mTaskListView.setAdapter(mAdapter); 
     } else { 
      mAdapter.clear(); 
      mAdapter.addAll(taskList); 
      mAdapter.notifyDataSetChanged(); 
     } 

     cursor.close(); 
     db.close(); 
    }} 

Fragment_two XML

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

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentRight="true" 
      android:layout_marginBottom="16dp" 
      android:layout_marginRight="16dp" 
      android:orientation="horizontal" > 


      <android.support.design.widget.FloatingActionButton 
       android:layout_width="50dp" 
       android:id="@+id/btnadd" 
       android:layout_height="50dp" 
       app:fabSize="normal" 
       android:clickable="true" 
       android:src="@drawable/red" 
       android:scaleType="center" 
       /> 
     </LinearLayout> 


    </RelativeLayout> 

item_todo 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:layout_gravity="center_vertical"> 

    <TextView 
     android:id="@+id/task_title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:text="Hello" 
     android:textSize="20sp" /> 

    <Button 
     android:id="@+id/task_delete" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentRight="true" 
     android:text="Done" /> 

</RelativeLayout> 
+0

缶を使用して –

+0

というエラーを追加して、あなたの膨大な 'textEntryView'を決してあなたのフラグメントに追加することはありません。 –

+0

@NeelaySrivastavaそのようなエラーはありません。 id = "task_delete"のボタンをクリックすると何も起こりません –

答えて

0

であるあなたは、あなたのonActivityCreatedで新しいビューを膨らましかし、あなたはそのビューを使用したことがありません!!! myButtonは、そのビューが使用されていないボタンを参照しています!

編集:

あなたがあなたの目標に達することができる方法はたくさんあります:あなたは、インターフェイスを初期化し、フラグメントに渡すことができ

インタフェースがそうするたびに、何かに起こります、あなたの活動(たとえばボタンをクリック)は、理解されます

フラグメントは

を理解するようBroadcastReceivers

あなたがボタンの上にあなたのフラグメントおよびユーザークリックでローカル放送受信機を登録することができ、あなたは、その放送を送信する私は2番目のものを示唆してEVENTBUSライブラリ

+0

はい、実際はボタンが別のレイアウトになっていますので、myButton.setOnClickListenerを含む行のNullPointerエラーを回避するために、新しいViewを追加しました。私を正しい道に導くことができますか? –

+0

は、ボタンの中にアクティビティがあり、その中にフラグメントがあるとします。フラグメント内のボタンにアクセスする必要があります。私は正しい? @AnkitShah –

+0

はい、正確です。 ToDoFragment.classからitem_todo.xmlのボタンにアクセスしたい –

関連する問題