2016-11-21 9 views
0

Hye ... Я новичок в разработке android, и я столкнулся с небольшой проблемой в проекте Android, который сейчас у меня. Коды ниже успешно возвращают список элементов в мастере activity_ticket_info.xml. Поскольку количество элементов появилось на основе цикла, как установить идентификатор на каждом отдельном элементе, который появился после этого, он может быть установлен как кликабельные элементы для намерения другому макету действий? Пожалуйста, помогите мне разобраться в этом. Большое спасибо за помощь ..Android: Как установить идентификаторы для каждого отдельного элемента в списке массивов карт и быть кликабельными?

TicketAdapter.java

package info.androidhive.navigationdrawer.activity; 

import android.content.Context; 
import android.content.Intent; 
import android.support.v7.widget.CardView; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Toast; 

import info.androidhive.navigationdrawer.R; 
import info.androidhive.navigationdrawer.ticketfragments.ComboA_TicketFragment; 
import info.androidhive.navigationdrawer.ticketfragments.ComboB_TicketFragment; 
import info.androidhive.navigationdrawer.ticketfragments.ComboC_TicketFragment; 
import info.androidhive.navigationdrawer.ticketfragments.ComboD_TicketFragment; 
import info.androidhive.navigationdrawer.ticketfragments.ComboE_TicketFragment; 
import info.androidhive.navigationdrawer.ticketfragments.ComboF_TicketFragment; 
import info.androidhive.navigationdrawer.ticketfragments.DuckTourTicketFragment; 
import info.androidhive.navigationdrawer.ticketfragments.FOneSimulatorFragment; 
import info.androidhive.navigationdrawer.ticketfragments.SixDCinemotionTicketFragment; 
import info.androidhive.navigationdrawer.ticketfragments.SkyCabBasicTicketFragment; 
import info.androidhive.navigationdrawer.ticketfragments.SkyCabExpressLaneTicketFragment; 
import info.androidhive.navigationdrawer.ticketfragments.SkyCabPrivateVipGlassTicketFragment; 

import static android.R.attr.x; 

/** 
* Created by user on 11/14/2016. 
*/ 

public class TicketAdapter extends RecyclerView.Adapter<TicketViewHolder> 
{ 
    String [] name = { 
        "Combo A", 
        "Combo B", 
        "Combo C", 
        "Combo D", 
        "Combo E", 
        "Combo F", 
        "Combo G", 
        "Combo H", 
        "Combo I", 
        "Combo J", 
        "Combo K", 
        "Combo L" 
        }; 

    Context context; 
    LayoutInflater inflater; 

    public TicketAdapter(Context context) 
    { 
     this.context = context; 
     inflater = LayoutInflater.from(context); 
    } 

    @Override 
    public TicketViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
    { 
     View v = inflater.inflate(R.layout.item_list, parent, false); 

     TicketViewHolder viewHolder = new TicketViewHolder(v); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(TicketViewHolder holder, final int position) 
    { 
     holder.textTitle.setText(name[position]); 
/*  holder.textDesc.setText(desc[position]);*/ 
     holder.imageView.setOnClickListener(clickListener); 
     holder.imageView.setTag(holder); 
//  holder.imageView.setId(positionId[position]); 

     holder.cardview.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       switch (position) 
       { 
        case 0: 
         Intent intent0 = new Intent(v.getContext(),SkyCabBasicTicketFragment.class); 
         v.getContext().startActivity(intent0); 
         break; 
        case 1: 
         Intent intent1 = new Intent(v.getContext(),SkyCabExpressLaneTicketFragment.class); 
         v.getContext().startActivity(intent1); 
         break; 
        case 2: 
         Intent intent2 = new Intent(v.getContext(),SkyCabPrivateVipGlassTicketFragment.class); 
         v.getContext().startActivity(intent2); 
         break; 
        case 3: 
         Intent intent3 = new Intent(v.getContext(),SixDCinemotionTicketFragment.class); 
         v.getContext().startActivity(intent3); 
         break; 
        case 4: 
         Intent intent4 = new Intent(v.getContext(),DuckTourTicketFragment.class); 
         v.getContext().startActivity(intent4); 
         break; 
        case 5: 
         Intent intent5 = new Intent(v.getContext(),FOneSimulatorFragment.class); 
         v.getContext().startActivity(intent5); 
         break; 
        case 6: 
         Intent intent6 = new Intent(v.getContext(),ComboA_TicketFragment.class); 
         v.getContext().startActivity(intent6); 
         break; 
        case 7: 
         Intent intent7 = new Intent(v.getContext(),ComboB_TicketFragment.class); 
         v.getContext().startActivity(intent7); 
         break; 
        case 8: 
         Intent intent8 = new Intent(v.getContext(),ComboC_TicketFragment.class); 
         v.getContext().startActivity(intent8); 
         break; 
        case 9: 
         Intent intent9 = new Intent(v.getContext(),ComboD_TicketFragment.class); 
         v.getContext().startActivity(intent9); 
         break; 
        case 10: 
         Intent intent10 = new Intent(v.getContext(),ComboE_TicketFragment.class); 
         v.getContext().startActivity(intent10); 
         break; 
        case 11: 
         Intent intent11 = new Intent(v.getContext(),ComboF_TicketFragment.class); 
         v.getContext().startActivity(intent11); 
         break; 
       } 

      } 
     }); 
    } 

    View.OnClickListener clickListener = new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      TicketViewHolder vholder = (TicketViewHolder) v.getTag(); 
      int position = vholder.getPosition(); 

/*   Toast.makeText(context,"You have choose " + position,Toast.LENGTH_LONG).show();*/ 

      //Display toast message with each tickets caption details 
      Toast.makeText(context,"You have choose " + (name[position]),Toast.LENGTH_LONG).show(); 
     } 
    }; 

    @Override 
    public int getItemCount() 
    { 
     return name.length; 
    } 
} 

** ОБНОВЛЕНО: Я пытаюсь реализовать переключатель дела заявление, как описано выше для каждого отдельных элементов, которые необходимо перемещаться к каждому фрагменту макета и ошибок нет, но он не работает. Может ли приведенный выше оператор case switch быть правильным способом навигации по каждому элементу или есть другой лучший способ реализации? **

TicketInfoActivity.java

package info.androidhive.navigationdrawer.activity; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.MenuItem; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.View; 

import info.androidhive.navigationdrawer.R; 

import static info.androidhive.navigationdrawer.R.id.name; 

public class TicketInfoActivity extends AppCompatActivity 
{ 
    RecyclerView ticketView; 

    /** Called when the activity is first created. */ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_ticket_info); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     ticketView = (RecyclerView) findViewById(R.id.my_recycler_view); 

     TicketAdapter adapter = new TicketAdapter(this); 
     ticketView.setAdapter(adapter); 
     ticketView.setHasFixedSize(true); 
     ticketView.setLayoutManager(new LinearLayoutManager(this)); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) 
    { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == android.R.id.home) 
     { 
      // finish the activity 
      onBackPressed(); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

TicketViewHolder.java

package info.androidhive.navigationdrawer.activity; 

import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 

import info.androidhive.navigationdrawer.R; 

public class TicketViewHolder extends RecyclerView.ViewHolder 
{ 
    TextView textTitle,textDesc; 
    ImageView imageView; 
    CardView cardview; 

    public TicketViewHolder(View itemView) 
    { 
     super(itemView); 

     textTitle = (TextView) itemView.findViewById(R.id.list_title); 
/*  textDesc = (TextView) itemView.findViewById(R.id.list_desc);*/ 
     imageView = (ImageView) itemView.findViewById(R.id.list_avatar); 
     cardview = (CardView) itemView.findViewById(R.id.ticket_view); 
    } 
} 

item_list.xml

<?xml version="1.0" encoding="utf-8"?> 

<android.support.v7.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/ticket_view" 
    android:layout_width="match_parent" 
    android:layout_height="160dp" 
    android:layout_marginBottom="16dp" 
    android:layout_marginLeft="10dp" 
    android:layout_marginRight="10dp" 
    android:background="#C5CAE9" 
    android:foreground="?attr/selectableItemBackground" 
    android:theme="@style/ThemeOverlay.AppCompat.Light"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:gravity="center" 
     android:paddingTop="16dp" 
     android:layout_height="match_parent"> 

     <!-- Icon --> 
     <ImageView 
      android:id="@+id/list_avatar" 
      android:layout_width="match_parent" 
      android:layout_height="85dp" 
      android:scaleType="fitCenter" 
      android:src="@drawable/ic_tickets_info_color_48dp" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" /> 

     <!-- Title --> 
     <TextView 
      android:id="@+id/list_title" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Product Description Goes Here... " 
      android:textColor="#000000" 
      android:textStyle="bold" 
      android:textAppearance="?attr/textAppearanceListItem" 
      android:textSize="18sp" 
      android:gravity="center_horizontal" 
      android:layout_below="@+id/list_avatar" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:layout_marginTop="15dp"/> 

     <!-- Description --> 

    </RelativeLayout> 
</android.support.v7.widget.CardView> 

activity_ticket_info.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_ticket_info" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="info.androidhive.navigationdrawer.activity.TicketInfoActivity"> 

    <!--<include layout="@layout/actionbar_layout" />--> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/my_recycler_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:clipToPadding="false" 
     android:paddingBottom="16dp" 
     android:paddingTop="16dp" 
     android:scrollbars="vertical" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 
</RelativeLayout> 
+0

, где вы хотите и идентификатор, который вы хотите посмотреть, вы уже получаете нажмём от recyler адаптера – Vadivel

+0

@ Vadivel, если вы запустите коды, вы найдете список комбинированных элементов, которые будут успешно указаны в файле activity_ticket_info.xml с тостами. Тогда проблема заключается в том, как назначить каждому комбинированным элементам ID, потому что я хочу сделать каждый элемент кликабельным для другого макета активности? – mille

+0

У вас есть позиция из комбо-объекта, затем используйте позицию для перемещения другого действия и пропустите позицию, когда вы выбираете комбо-элемент и выполняете функциональность, что хотите в другой деятельности. В противном случае вы можете создать массив идентификаторов. – Vadivel

ответ

0

Я думаю, что нет такого метода, чтобы обеспечить идентификатор для каждого элемента динамически. Согласно вышеприведенной программе вы можете выбрать только один элемент в recyclerView за раз. Лучше создать метод в основной деятельности, как показано ниже

public void setRVAdapterSelectedItem(String itemName){this.itemName = itemName;} 

и установить щелкнул строку деятельности путем вызова из OnClick адаптера

context.setRVAdapterSelectedItem(selectedString); 

Так что вы получите список в деятельности. Всегда лучше использовать класс модели для списка элементов. Следовательно, вы можете использовать логическое значение, чтобы определить, выбран ли элемент или нет, и использовать его, чтобы выделить элемент в onBindViewHolder.

0

Если вы хотите использовать его позже как интерактивный, вместо назначения идентификатора, вы можете установить прослушиватель для каждый элемент, когда они возвращаются и вызывают намерение.

Однако, если вы все еще хотите присвоить идентификатор, вы можете использовать метод SETID (INT), которая доступна для всех типов виджетов .. и вид

0

, если вы хотите просто сделать интерактивной каждую ваш cardview детали вы можете сделать интерфейс

public interface ItemClickListener { 
    void onItemClick(View v, int pos); 
} 

и реализовать это на вас адаптер класса, как этот

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

private List<Model> list; 
Context mContext; 
public MyAdapter(Context context,List<Model> list) { 
    mContext=context; 
    this.list = list; 
} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.card_view, parent, false); 
    return new MyViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(MyViewHolder holder, int position) { 
    final Model model = list.get(position); 
    holder.name.setText("name :"+model.getName()); 
    holder.setItemClickListener(new ItemClickListener() { 
     @Override 
     public void onItemClick(View v, int position) { 
      Snackbar.make(v,list.get(position).getName(),Snackbar.LENGTH_SHORT).show(); 
      Intent i=new Intent(mContext, Showname.class); 
      mContext.startActivity(i); 
     } 
    }); 
} 

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

public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener 
{ 
    public TextView name,branch,sem; 
    ItemClickListener itemClickListener; 
    public MyViewHolder(View itemView) { 
     super(itemView); 
     name = (TextView)itemView.findViewById(R.id.s_name); 
     itemView.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     this.itemClickListener.onItemClick(v,getLayoutPosition()); 
    } 
    public void setItemClickListener(ItemClickListener ic) 
    { 
     this.itemClickListener=ic; 
    } 
} 
} 
+0

Я пробовал, но он не работает и немного запутался. Не могли бы вы помочь мне, предоставив мне правильный способ реализовать его, обратившись к вышеуказанным кодам? Я обновил оператор case switch на TicketAdapter.java, но я не уверен, что это правильный способ или нет. Я действительно новичок в android dev и все еще – mille