質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

1回答

4486閲覧

(android)RecyclerViewへのクリックイベント実装

yataka

総合スコア8

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/07/07 22:38

編集2017/07/09 19:15

###(android)RecyclerViewへのクリックイベント実装

ウェブ上においたcsvファイルからリストを生成するRecyclerViewを作成しました。

そこにクリックイベントを実装したいのですが、うまく行かず途方に暮れています。

恥ずかしながら、既存のコードを組み合わせて動作を確かめている段階の入門者です。
質問の仕方、情報の不足などあろうかと思いますが、宜しくお願い致します。

###個人的な推測
ArticleViewAdapter.java内のsetOnItemClickListenerが使用されていないため、その下の条件分岐に入れていないことが原因だと考えています。

問題は繋ぎあわせたコードをきちんと理解していないため、setOnItemClickListenerをどこでどのように呼び出せばよいのか解りません。

ご教授ご指摘を頂ければありがたいです。

###最終的に実現したいこと
ArticleViewActivity.javaで取得しcsv_line_temp[i][3]に格納したURLをタップしたリストの位置に対応して、Webviewに渡したい。

###参考にさせて頂いた記事
RecyclerViewの基本
http://qiita.com/naoi/items/f8a19d6278147e98bbc2

RecyclerViewのアイテムクリック
http://qiita.com/ushi3_jp/items/ba0df2df6b0b77278f14

###補足情報(言語/FW/ツール等のバージョンなど)
Android Studio2.3.3

###プロジェクト全体のソースファイル
http://kidounikki.o0o0.jp/odapp/od_test_01.zip

###ArticleViewActivity.java

public class ArticleViewActivity extends AppCompatActivity{ private RecyclerView mRecyclerView; String[][] csv_line_temp = new String[100][]; int row = 0; List<RowData> dataset = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_titles); mRecyclerView = (RecyclerView) findViewById(R.id.activity_titles); ArticleViewAdapter adapter = new ArticleViewAdapter(this.createDataset()); LinearLayoutManager llm = new LinearLayoutManager(this); mRecyclerView.setHasFixedSize(true); mRecyclerView.setLayoutManager(llm); DividerItemDecoration dividerItemDecoration1 = new DividerItemDecoration(mRecyclerView.getContext(), LinearLayoutManager.VERTICAL); mRecyclerView.addItemDecoration(dividerItemDecoration1); dividerItemDecoration1.setDrawable(ContextCompat.getDrawable(this, R.drawable.divider)); mRecyclerView.setAdapter(adapter); } private List<RowData> createDataset() { class FirstRun implements Runnable{ @Override public void run() { InputStream is = null; BufferedReader br = null; try{ //概ねの操作で例外処理が必要です。 //URLを作成する String adress="http://kidounikki.o0o0.jp/odapp/articles/list.csv"; URL url=new URL(adress);//URLを設定 // URL接続 HttpURLConnection connect = (HttpURLConnection)url.openConnection();//サイトに接続 connect.setRequestMethod("GET");//プロトコルの設定 is = connect.getInputStream();//ファイルを開く br = new BufferedReader(new InputStreamReader(is)); String line = br.readLine(); for (row = 0; line != null; row++) { csv_line_temp[row] = line.split(",", 0); line = br.readLine(); } br.close(); // URL切断 is.close();//InputStreamを閉じる connect.disconnect();//サイトの接続を切断 } catch(Exception e){ Log.d("FileReadError", "eee"); System.out.println(e); } } } new Thread(new Runnable() { @Override public void run() { FirstRun sp = new FirstRun(); Thread t = new Thread(sp); t.start(); try{ t.join(); }catch(InterruptedException e){ //joinはチェック例外のInterruptedExceptionを投げる e.printStackTrace(); } for (int i = row - 1; i > -1; i--) { RowData data = new RowData(); data.setTitle("軌道日記:第" + csv_line_temp[i][0] + "回"); data.setDate(csv_line_temp[i][1]); data.setDetail(csv_line_temp[i][2]); dataset.add(data); } } }).start(); return dataset; } }

###ArticleViewHolder.java

public class ArticleViewHolder extends RecyclerView.ViewHolder { public TextView titleView; public TextView detailView; public TextView dateView; public ArticleViewHolder(View itemView) { super(itemView); titleView = (TextView) itemView.findViewById(R.id.title); detailView = (TextView) itemView.findViewById(R.id.detail); dateView = (TextView) itemView.findViewById(R.id.date); } }

###ArticleViewAdapter.java

public class ArticleViewAdapter extends RecyclerView.Adapter<ArticleViewHolder> implements View.OnClickListener { private final List<RowData> list; public ArticleViewAdapter(List<RowData> list) { this.list = list; } private RecyclerView mRecycler; private OnItemClickListener mListener; @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); mRecycler= recyclerView; } @Override public void onDetachedFromRecyclerView(RecyclerView recyclerView) { super.onDetachedFromRecyclerView(recyclerView); mRecycler = null; } @Override public ArticleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.row, parent,false); inflate.setOnClickListener(this); ArticleViewHolder vh = new ArticleViewHolder(inflate); return vh; } @Override public void onBindViewHolder(ArticleViewHolder holder, int position) { holder.titleView.setText(list.get(position).getTitle()); holder.detailView.setText(list.get(position).getDetail()); holder.dateView.setText(list.get(position).getDate()); } @Override public int getItemCount() { return list.size(); } public void setOnItemClickListener(OnItemClickListener listener) { mListener = listener; } @Override public void onClick(View view) { if (mRecycler == null) { Log.d("RecyclerCheck", "eeeeeeeee"); return; } if (mListener != null) { Log.d("ListerCheck", "eeeeeeeee"); int position = mRecycler.getChildAdapterPosition(view); RowData item = list.get(position); mListener.onItemClick(this, position, item); } Log.d("ListonClick", "eeeeeeeee"); } public static interface OnItemClickListener { public void onItemClick(ArticleViewAdapter adapter, int position, RowData item); } }

###RowData.java

public class RowData { private String title; private String detail; private String date; public String getTitle(){ return this.title; } public String getDetail(){ return this.detail; } public String getDate(){ return this.date; } public void setTitle(String title){ this.title = title; } public void setDetail(String detail){ this.detail = detail; } public void setDate(String date){ this.date = date; } }

###row.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="6dp" android:paddingLeft="5dp" android:paddingRight="5dp" android:paddingTop="5dp"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="5dp" android:paddingRight="5dp" android:gravity="start" android:textAppearance="?android:attr/textAppearanceSmall" /> <TextView android:id="@+id/date" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="5dp" android:paddingRight="10dp" android:gravity="end" android:textAppearance="?android:attr/textAppearanceSmall" /> </LinearLayout> <TextView android:id="@+id/detail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="20dp" android:paddingRight="10dp" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> </LinearLayout>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ArticleViewAdapter.javaのonBindViewHolderの中で行を囲むレイアウトに対してで実現できました。
以下、行クリック、ロングクリックとスイッチつけた場合のスイッチのオン、オフについての例です。

java

1 @Override 2 public void onBindViewHolder(final ItemViewHolder holder, final int position) { 3 final String data; 4 //アラーム行クリック 5 holder.row_layout.setOnClickListener(new View.OnClickListener() { 6 @Override 7 public void onClick(View v) { 8 notifyDataSetChanged(); 9 } 10 }); 11 //アラーム行ロングクリック 12 holder.row_layout.setOnLongClickListener(new View.OnLongClickListener() { 13 @Override 14 public boolean onLongClick(View v) { 15 notifyDataSetChanged(); 16 return true; 17 } 18 }); 19 //アラームスイッチ変更 20 holder.sw_alarm.setOnCheckedChangeListener(new 21CompoundButton.OnCheckedChangeListener() { 22 @Override 23 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 24 if(holder.sw_alarm.isChecked()) { 25 //mSwitch : Off -> On の時の処理 26 int a=1; 27 } else { 28 //mSwitch : On -> Off の時の処理 29 int a=1; 30 } 31 } 32 }); 33 }

投稿2019/07/24 16:15

編集2019/08/18 05:32
jun74

総合スコア338

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問