2017-03-29 13 views
0

リストビューを使用していますが、このリストビューのonclickリスナーを実装したいと思います。私はリスト内のいくつかのインデックスをクリックすると、別のページが開かれるように、新しいフラグメントにリンクする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); 
    } 
    ... 
} 
関連する問題