2017-03-29 2 views
0

그래서 작동하는 listview가 있지만이 목록보기에 대해 onclick 수신기를 구현하려고합니다. 나는 onclick listener를 새로운 조각으로 연결하여 목록의 일부 색인을 클릭 할 때 다른 페이지가 열리길 원합니다. 나는 몇 가지 테스트를 수행했으며 onclick 리스너가 전체적으로 작동하지 않는다고 판단했습니다.새 조각에 링크하는 목록보기에 onclick 수신기를 구현하는 방법

이것은 내가 지금까지 무엇을 가지고 :

내가 잘못 뭐하는 거지
package ca.queensu.engsoc.events; 

import android.app.Activity; 
import android.app.Fragment; 
import android.app.FragmentManager; 
import android.app.FragmentTransaction; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.util.AttributeSet; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class eventList extends Activity implements AdapterView.OnItemClickListener 
{ 
public static final String KEY_NAME = "NAME_KEY"; 
ListView events; 
String[] e; 
mockData myBadData = new mockData(); 
@Override 

protected void onCreate (Bundle savedInstanceState) 
{ 
    //Fragment fragment_blank2=new SomeFragment(); 

    e = myBadData.getData(); 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.event_list); 

    events=(ListView) findViewById(R.id.dayList); 

    ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,e); 

    events.setAdapter(adapter); 

    events.setOnItemClickListener(this); 
} 

@Override 

public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) 
{ 
    //TextView temp=(TextView) view; 

    View temp=view; 

    //final Toast toast = Toast.makeText(this, temp.getText() + "" + i, Toast.LENGTH_SHORT.show()); 

    temp.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      Bundle bundle = new Bundle(); 

      bundle.putString(KEY_NAME,myBadData.getOneData(i)); 

      Fragment fr = new event_description(); 

      fr.setArguments(bundle); 

      FragmentManager fm = getFragmentManager(); 

      FragmentTransaction fragmentTransaction = fm.beginTransaction(); 

      int contId = v.getId(); 

      fragmentTransaction.replace(contId, fr); 

      fragmentTransaction.commit(); 

      Intent i=new Intent(eventList.this, fr.getClass()); 

     } 
    }); 
} 

}

?

답변

0

사실 내가 알기 엔 추가 클릭 리스너를 설정할 필요가 없습니다. onItemClick() 메소드가이를 처리해야합니다. final int 필요하다면 클릭 한 뷰의 위치입니다.

0

먼저 어댑터와 액티비티/프래그먼트간에 콜백으로 사용할 인터페이스를 선언해야합니다.

RecyclerItemCallback :

public interface RecyclerItemCallback { 

    void onClick(int position); 

} 

그런 활동이 인터페이스를 구현합니다 다음 (

public class EventList extends Activity implements RecyclerItemCallback { 

    ... 

    @Override 
    public void onClick(int position) { 
     //Implement the method "Fragment getFragment(int position)" to find the Fragment you want based on the position 
     YourFragment newFragment = getFragment(position); 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     if (addToBackStack) { 
      fragmentTransaction.addToBackStack(newFragment.getClass().getSimpleName()); 
     } 
     fragmentTransaction.replace(R.id.content, newFragment).commitAllowingStateLoss(); 
    } 
} 

를 어댑터에서이 수행

YourAdapter

public class YourAdapter extends RecyclerView.Adapter<YourAdapter.MyViewHolder> { 

    private RecyclerItemCallback recyclerCallback; 
    private ArrayList<YourObject> list; 
    private Context context; 
    private int lastPosition; 

    public NewsAdapter(Context context, RecyclerItemCallback callback) { 
     this.context = context; 
     this.newsList = new ArrayList<>(); 
     this.recyclerCallback = callback; 
    } 
    ... 


    class MyViewHolder extends RecyclerView.ViewHolder { 
     private TextView text1; 
     ... 
     private View.OnClickListener onRowClicked = new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      recyclerCallback.onItemClick(getAdapterPosition()); 
     } 
    }; 

    MyViewHolder(View itemView, int viewType) { 
     super(itemView); 
     this.viewType = viewType; 
     ... 
     itemView.setOnClickListener(onRowClicked); 
    } 
    ... 
} 
관련 문제