2016-11-04 4 views
-1

기본적으로 조각보기에는 목록보기가 있습니다. 그리고 내 버튼을 포함하는 item_todo.xml이라는 또 다른 레이아웃. 내 레이아웃에서 delete_task 버튼을 클릭하는 동안 onClick()이 작동하지 않았습니다. 나를 도울 수 있다면 좋을 것입니다! 여기 onClick 단편에서 작동하지 않습니다.

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 내 클래스 ToDoFragment입니다

 <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 해당보기가 사용되지 않은 버튼을 참조하십시오!

편집 :

당신이 당신의 목표에 도달 할 수있는 많은 방법이있다 : 당신은 인터페이스를 초기화하고 조각에 전달할 수

인터페이스가 너무 때마다 뭔가 일이, 귀하의 활동 (예 : 버튼 클릭), 당신은 이해할 것입니다

브로드 캐스트 리시버

조각이

을 이해할 수 있도록 내가 두 번째 및 사용 EVENTBUS 라이브러리를 제안, 당신의 조각과 때 버튼을 사용자가 클릭하면 브로드 캐스트를 보낼 수있는 지역 방송 수신기를 등록 할 수 있습니다

+0

예, 실제로 버튼이 다른 레이아웃에 있기 때문에 myButton.setOnClickListener가 포함 된 줄에서 NullPointer 오류를 피하기 위해 새로운보기에 영향을주었습니다. 나를 올바른 길로 인도 할 수 있습니까? –

+0

에는 단추 안에있는 활동이 있고 활동 안에 조각이 있다고 가정 할 수 있습니까? 그리고 당신은 조각에있는 버튼에 대한 액세스 권한을 원합니다. 내가 맞습니까? @AnkitShah –

+0

네. ToDoFragment.class에서 item_todo.xml의 버튼에 액세스하려고합니다. –

관련 문제