2015-11-25 32 views
0

我試圖從單元格中點擊RecyclerView的表格中複製元素。如何複製RecyclerView中的元素

這是我MainActivity.java:

package com.example.caju1013.myapplication; 
 

 
import android.support.v7.widget.LinearLayoutManager; 
 
import android.support.v7.widget.RecyclerView; 
 
import android.app.Activity; 
 
import android.os.Bundle; 
 

 
import com.example.caju1013.myapplication.DataSource; 
 
import com.example.caju1013.myapplication.R; 
 
import java.util.ArrayList; 
 
import java.util.List; 
 

 
public class MainActivity extends Activity { 
 
    RecyclerView recyclerView; 
 
    MyAdapter myAdapter; 
 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 
     recyclerView = (RecyclerView) findViewById(R.id.drawerList); 
 
     myAdapter = new MyAdapter(this, getData1()); 
 
     recyclerView.setAdapter(myAdapter); 
 
     recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
 
     //recyclerView.setLayoutManager(new GridLayoutManager(this,2)); 
 
     // recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,1)); 
 
    } 
 

 

 
    public static List<DataSource> getData1() { 
 
     List<DataSource> data = new ArrayList<>(); 
 

 
     int[] icons = {R.drawable.icon0, R.drawable.icon1,R.drawable.icon2,R.drawable.icon3,R.drawable.icon4,R.drawable.icon5,R.drawable.icon6,R.drawable.icon7,R.drawable.icon8,R.drawable.icon9,R.drawable.icon10};  //icon0 es el nombre de la imagen, todas estas imagenes tienen que estar guardadas en la carpeta drawable 
 
     String[] titles = {"Circus", "Bridge", "Bar", "Building", "Fast food restaurant", "Business", "Car", "Hot dog", "Theatre", "Shopping resort", "Building"}; 
 
     String[] titles1={"648.847,765", "748.847,765", "848.847,765", "948.847,765", "848.847,765", "748.847,765", "648.847,765", "548.847,765", "448.847,765", "348.847,765"}; 
 
     String[] titles2={"4.823.976,876", "4.923.976,876", "4.823.976,876", "4.723.976,876", "4.623.976,876", "4.523.976,876", "4.423.976,876", "4.323.976,876", "4.223.976,876", "4.123.976,876"}; 
 

 
     for (int i = 0; i < icons.length && i < titles.length && i < titles1.length && i < titles2.length; i++) { 
 
      DataSource tmp = new DataSource(); 
 
      tmp.pictureId = icons[i]; 
 
      tmp.pointName = titles[i]; 
 
      tmp.CoordX = titles1[i]; 
 
      tmp.CoordY = titles2[i]; 
 

 
      data.add(tmp); 
 
     } 
 
     return data; 
 
    } 
 
}

這我Adapter.java:

package com.example.caju1013.myapplication; 
 

 
import android.content.Context; 
 
import android.provider.ContactsContract; 
 
import android.support.v7.widget.RecyclerView; 
 
import android.util.Log; 
 
import android.view.LayoutInflater; 
 
import android.view.View; 
 
import android.view.ViewGroup; 
 
import android.widget.ImageView; 
 
import android.widget.TextView; 
 
import android.widget.Toast; 
 

 
import java.util.Collections; 
 
import java.util.List; 
 

 
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { 
 
    private LayoutInflater inflater; 
 
    private Context context; 
 
    List<DataSource> data = Collections.emptyList(); 
 

 
    public MyAdapter(Context context, List<DataSource> data) { 
 
     this.context = context; 
 
     inflater = LayoutInflater.from(context); 
 
     this.data = data; 
 
    } 
 

 
    @Override 
 
    public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
 
     View view = inflater.inflate(R.layout.custom_row, viewGroup, false); 
 
     MyViewHolder viewHolder = new MyViewHolder(view); 
 
     return viewHolder; 
 
    } 
 

 
    @Override 
 
    public void onBindViewHolder(MyViewHolder viewHolder, int position) { 
 
     //The position of the item within the adapter's data set. 
 
     DataSource info = data.get(position); 
 
     viewHolder.text.setText(info.pointName); 
 
     viewHolder.CoordeX.setText(info.CoordX); //Enlazamos el mainactivity.java con el myadapter 
 
     viewHolder.CoordeY.setText(info.CoordY); 
 
     viewHolder.icon.setImageResource(info.pictureId); 
 

 
    } 
 

 
    @Override 
 
    public int getItemCount() { 
 
     return data.size(); 
 
    } 
 

 

 
    class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 
 

 
     TextView text; 
 
     TextView CoordeX; //añadimos a la clase 
 
     TextView CoordeY; 
 
     ImageView icon; 
 

 
     public MyViewHolder(View itemView) { 
 
      super(itemView); 
 
      text = (TextView) itemView.findViewById(R.id.listText); 
 
      CoordeX = (TextView) itemView.findViewById(R.id.listText2); // Asociamos el textview con el .xml 
 
      CoordeY = (TextView) itemView.findViewById(R.id.listText3); 
 
      icon = (ImageView) itemView.findViewById(R.id.listIcon); 
 
      //Log.i("MyAdapter", "MyViewHolder()" + " " + String.valueOf(getPosition())); 
 

 
      text.setOnClickListener(this); 
 
     } 
 

 
     @Override 
 
     public void onClick(View v) { 
 

 
      TextView tmp= (TextView)v; 
 

 

 

 

 
      Toast.makeText(context, tmp.getText().toString(), Toast.LENGTH_SHORT).show(); 
 

 
     } 
 

 
    } 
 

 
}

我認爲我有ķ現在元素的位置,但我不知道如何解決它...謝謝!

+0

要複製哪些元素? – bond007

+0

我希望實現一旦在項目的TextView元素上單擊的功能,該項目將被複制並追加到數據集中。 – Sadae

+0

只是清除我的理解,當你點擊textview的textview值應該被附加爲recycleview中的行? – bond007

回答

0

使用

viewHolder.text.setTag(info) 
    viewHolder.text.setClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      DataSource info = (DataSource)v.getTag(); 
      data.add(info); 
      notifyDataSetChanged(); 

     } 
     });