2017-01-23 24 views
0

我在這裏製作了一個RecyclerView和本教程。所有與一個工作正常對象(一行)。添加第二行後,我的佈局完全被破壞,只顯示第一個對象。有人知道答案嗎?RecyclerView中的多個對象出錯

這是一條線(都應該看起來像這樣線):

enter image description here

這應該是像第一個另一行:

enter image description here

這是我的片段,其中我創建的對象:

@Override 
 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
 

 
    View view = inflater.inflate(R.layout.fragment_settings, container, false); 
 

 
    accountRecyclerView = (RecyclerView) view.findViewById(R.id.account_recycler_view); 
 

 
    aAdapter = new SettingsAdapter(settingList); 
 
    RecyclerView.LayoutManager aLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext()) { 
 
     // Disable scrolling in the RecyclerView 
 
     @Override 
 
     public boolean canScrollVertically() { 
 
      return false; 
 
     } 
 
    }; 
 

 
    // Setup account RecyclerView 
 
    accountRecyclerView.setLayoutManager(aLayoutManager); 
 
    accountRecyclerView.setItemAnimator(new DefaultItemAnimator()); 
 
    accountRecyclerView.setAdapter(aAdapter); 
 

 
    prepareAccountData(); 
 

 
    return view; 
 
} 
 

 
private void prepareAccountData() { 
 
    // Create new setting 
 
    Settings setting = new Settings(1, R.drawable.ic_menu_logout, "Abmelden", "Deine Daten bleibe erhalten"); 
 
    // Add Object to list 
 
    settingList.add(setting); 
 

 
    setting = new Settings(2, R.drawable.ic_menu_logout, "Testadd", "Some text"); 
 
    settingList.add(setting); 
 

 
    // Notify data changes 
 
    aAdapter.notifyDataSetChanged(); 
 
}

這是我的適配器:

public class SettingsAdapter extends RecyclerView.Adapter<SettingsAdapter.MySettingHolder> { 
 

 
    private List<Settings> settingList; 
 
    private Context context; 
 

 
    public class MySettingHolder extends RecyclerView.ViewHolder { 
 

 
     public int type; 
 
     public ImageView settingImage; 
 
     public TextView settingTitle, settingSubtitle; 
 

 
     public MySettingHolder(View view) { 
 
      super(view); 
 
      settingImage = (ImageView) view.findViewById(R.id.settingImage); 
 
      settingTitle = (TextView) view.findViewById(R.id.settingTitle); 
 
      settingSubtitle = (TextView) view.findViewById(R.id.settingSubtitle); 
 
     } 
 
    } 
 

 
    public SettingsAdapter(Context context) { 
 
     this.context = context; 
 
    } 
 

 
    public SettingsAdapter(List<Settings> settingList) { 
 
     this.settingList = settingList; 
 
    } 
 

 
    @Override 
 
    public MySettingHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
 
     View itemView = LayoutInflater.from(parent.getContext()) 
 
       .inflate(R.layout.settings_list_row, parent, false); 
 

 
     return new MySettingHolder(itemView); 
 
    } 
 

 
    @Override 
 
    public void onBindViewHolder(MySettingHolder holder, int position) { 
 
     // Setting for one entry 
 
     final Settings setting = settingList.get(position); 
 
     //RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
 

 
     holder.settingImage.setImageResource(setting.getSettingImageUrl()); 
 
     // If the settingSubtitle is empty it should be not visible and just the settingTitle 
 
     if (setting.getSettingSubtitle().equals("")) { 
 
      //params.setMargins(0, 18, 0, 18); 
 
      //holder.settingTitle.setLayoutParams(params); 
 
      holder.settingTitle.setText(setting.getSettingTitle()); 
 
      holder.settingSubtitle.setVisibility(View.GONE); 
 
     } else { 
 
      //params.setMargins(0, 18, 0, 18); 
 
      //holder.settingTitle.setLayoutParams(params); 
 
      //params.setMargins(0, 0, 0, 18); 
 
      //holder.settingSubtitle.setLayoutParams(params); 
 
      holder.settingTitle.setText(setting.getSettingTitle()); 
 
      holder.settingSubtitle.setText(setting.getSettingSubtitle()); 
 
     } 
 

 
     // Get setting holder type 
 
     holder.type = setting.getType(); 
 

 
     // OnTouchListener for holder/vector color change 
 
     holder.itemView.setOnTouchListener(new View.OnTouchListener() { 
 
      @Override 
 
      public boolean onTouch(View v, MotionEvent event) { 
 
       // Define setting holder 
 
       MySettingHolder holder = (MySettingHolder) (v.getTag()); 
 

 
       // ImageView for changing color 
 
       ImageView imageView = (ImageView) v.findViewById(R.id.settingImage); 
 

 
       // Detect if user touch or not 
 
       if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) { 
 
        // Change ImageView color to primary color 
 
        DrawableCompat.setTint(imageView.getDrawable(), ContextCompat.getColor(v.getContext(), R.color.colorPrimary)); 
 
       } else if (event.getAction() == android.view.MotionEvent.ACTION_UP) { 
 
        // Change ImageView color to primary color 
 
        DrawableCompat.setTint(imageView.getDrawable(), ContextCompat.getColor(v.getContext(), R.color.iconGray)); 
 
       } 
 

 
       return false; 
 
      } 
 
     }); 
 

 
     // OnClickListener for holder 
 
     holder.itemView.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(final View v) { 
 
       // Define setting holder 
 
       MySettingHolder holder = (MySettingHolder) (v.getTag()); 
 

 
       // Define switch for line 
 
       switch (holder.type) { 
 
        // Case 1 = Logout 
 
        case 1: 
 
         // OnCLickListener for an event 
 
         DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { 
 
          @Override 
 
          public void onClick(DialogInterface dialog, int which) { 
 
           switch (which) { 
 

 
            // Case user types Yes 
 
            case DialogInterface.BUTTON_POSITIVE: 
 
             // Deleting shared preferences for login activity 
 
             SharedPreferences loginPreferences = v.getRootView().getContext().getSharedPreferences("loginPrefs", Context.MODE_PRIVATE); 
 
             SharedPreferences.Editor editor = loginPreferences.edit(); 
 
             editor.clear(); 
 
             editor.commit(); 
 

 
             // Start new acitivity for login 
 
             v.getContext().startActivity(new Intent(v.getContext(), LoginActivity.class)); 
 

 
             // Exit activity 
 
             ((Activity)v.getContext()).finish(); 
 

 
             // Exit case button positive/yes 
 
             break; 
 

 
            case DialogInterface.BUTTON_NEGATIVE: 
 
             // Dismiss dialog 
 
             dialog.dismiss(); 
 

 
             // Exit case button negative/no 
 
             break; 
 
           } 
 
          } 
 
         }; 
 
         // AlertDialog for logout check 
 
         AlertDialog.Builder builder = new AlertDialog.Builder(v.getRootView().getContext()); 
 
         builder.setMessage("Möchtest du dich wirklich abmelden?") 
 
           .setPositiveButton("Ja", dialogClickListener) 
 
           .setNegativeButton("Nein", dialogClickListener) 
 
           .show(); 
 

 
         // Exit switch 
 
         break; 
 

 
        case 2: 
 
         // do other stuff 
 
         break; 
 

 
        default: 
 

 
         break; 
 
       } 
 
      } 
 
     }); 
 

 
     holder.itemView.setTag(holder); 
 
    } 
 

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

 
}

這是我的setter /吸氣:

public class Settings { 
 
    private String settingTitle, settingSubtitle; 
 
    private int settingImageUrl; 
 
    private int type; 
 

 
    public Settings(int type, int settingImageUrl, String settingTitle, String settingSubtitle) { 
 
     this.type = type; 
 
     this.settingImageUrl = settingImageUrl; 
 
     this.settingTitle = settingTitle; 
 
     this.settingSubtitle = settingSubtitle; 
 
    } 
 

 
    public void setSettingImage(int settingImageUrl) { 
 
     this.settingImageUrl = settingImageUrl; 
 
    } 
 

 
    public int getSettingImageUrl() { 
 
     return settingImageUrl; 
 
    } 
 

 
    public void setSettingTitle(String settingTitle) { 
 
     this.settingTitle = settingTitle; 
 
    } 
 

 
    public String getSettingTitle() { 
 
     return settingTitle; 
 
    } 
 

 
    public void setSettingSubtitle(String settingSubtitle) { 
 
     this.settingSubtitle = settingSubtitle; 
 
    } 
 

 
    public String getSettingSubtitle() { 
 
     return settingSubtitle; 
 
    } 
 

 
    public int getType() { 
 
     return type; 
 
    } 
 

 
    public void setType(int type) { 
 
     this.type = type; 
 
    } 
 

 
}

這是我的XML,我定義行:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
    android:layout_height="match_parent" 
 
    android:layout_width="match_parent" 
 
    android:focusable="true" 
 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
 
    android:paddingRight="@dimen/activity_horizontal_margin" 
 
    android:clickable="true" 
 
    android:background="?android:attr/selectableItemBackground" 
 
    android:orientation="vertical"> 
 

 
    <!-- Setting icon --> 
 
    <ImageView 
 
     android:id="@+id/settingImage" 
 
     android:layout_width="24dp" 
 
     android:layout_height="24dp" 
 
     android:layout_centerVertical="true" 
 
     android:layout_alignParentStart="true" 
 
     android:layout_marginRight="8dp" 
 
     android:layout_marginTop="1dp" 
 
     android:layout_marginBottom="1dp" 
 
     android:contentDescription="Icon" 
 
     android:src="@drawable/my_icon" /> 
 

 
    <!-- Setting title --> 
 
    <TextView 
 
     android:id="@+id/settingTitle" 
 
     android:textColor="@color/colorBlack" 
 
     android:layout_width="match_parent" 
 
     android:layout_marginLeft="40dp" 
 
     android:layout_marginTop="14dp" 
 
     android:textSize="16dp" 
 
     android:layout_height="wrap_content" /> 
 

 
    <!-- Setting subtitle --> 
 
    <TextView 
 
     android:id="@+id/settingSubtitle" 
 
     android:layout_below="@id/settingTitle" 
 
     android:layout_marginBottom="14dp" 
 
     android:layout_marginLeft="40dp" 
 
     android:layout_width="match_parent" 
 
     android:layout_height="wrap_content" /> 
 

 
</RelativeLayout>

+1

後settings_list_row.xml了。 – Saurabh

+0

@Saurabh完成! – ItsOdi1

+1

嘗試在xml中爲'Relativelayout'設置'android:layout_height =「wrap_content」' – Saurabh

回答

1

由於項目的高度match_parent。它試圖把整個屏幕和其他物品推走。

嘗試settings_list_row.xml設置android:layout_height="wrap_content"Relativelayout

+0

我可以問你一些關於我的OnTouchListener的東西嗎?我認爲它的簡單 – ItsOdi1

+1

當然。前進。 – Saurabh

+0

當你看看我的適配器,你可以看到一個OnTouchListener,你可以看到我想改變我觸摸的元素的顏色。但現在有兩條線後,我可以看到,當我點擊一條時,我改變了所有元素的顏色。有沒有辦法說#只是點擊項目#的顏色變化? – ItsOdi1