2017-01-16 167 views
1

截圖我的佈局列表視圖滾動不工作

Layout ss

我加入TranscriptMode以XML和Java。但它不工作... XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/contact_list" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.buckydroid.chat.ContactList"> 

    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/contact_lists" 
     android:transcriptMode="alwaysScroll" 
     android:layout_weight="1"/> 
</RelativeLayout> 

列表視圖是片段的一部分,我把它當bottombar佈局的指數0被點擊.. 片段級的Java代碼:

public class ContactList extends Fragment implements AdapterView.OnItemClickListener{ 
    private ListView contactList; 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view= inflater.inflate(R.layout.contact_list,container,false) ; 
     contactList = (ListView)view.findViewById(R.id.contact_lists); 
     contactList.setAdapter(new ContactListAdapter(getActivity())); 

     return view; 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

    } 

    class RowData { 
     String user_name; 
     int user_img; 
     String user_msg; 
     int message_status; 

     public RowData(String user_name, int user_img, String user_msg, int message_status) { 
      this.user_name = user_name; 
      this.user_img = user_img; 
      this.user_msg = user_msg; 
      this.message_status = message_status; 
     } 
    } 
    class viewHolder{ 
     CircleImageView user_img; 
     ImageView message_stats; 
     TextView user_name; 
     TextView user_message; 
     viewHolder(View v){ 
      user_img = (CircleImageView)v.findViewById(R.id.user_img_list); 
      user_name = (TextView)v.findViewById(R.id.contact_name); 
      user_message = (TextView)v.findViewById(R.id.user_message); 
      message_stats = (ImageView)v.findViewById(R.id.message_status); 

     } 
    } 
    class ContactListAdapter extends BaseAdapter{ 

     ArrayList<RowData> list; 
     Context context; 
     ContactListAdapter(Context c){ 
      context = c; 
      list = new ArrayList<RowData>(); 
      String[] username = {"Bucky","Marie","Melvin","Rheo","Emi","Lighter","Toco","Ravi","krushna"}; 
      String[] message = {"Bunch Of Shitty Texts . ","Bunch Of Shitty Texts . ","Bunch Of Shitty Texts . ","Bunch Of Shitty Texts . ","Bunch Of Shitty Texts .","Bunch Of Shitty Texts . ","Bunch Of Shitty Texts . u","Bunch Of Shitty Texts . Fuck You","Bunch Of Shitty Texts"}; 
      int[] user_image = {R.drawable.man,R.drawable.man,R.drawable.man,R.drawable.man,R.drawable.man,R.drawable.man,R.drawable.man,R.drawable.man,R.drawable.man}; 
      int[] message_stats = {R.drawable.unreadmessage,R.drawable.unreadmessage,R.drawable.unreadmessage,R.drawable.unreadmessage,R.drawable.unreadmessage,R.drawable.unreadmessage,R.drawable.unreadmessage,R.drawable.unreadmessage,R.drawable.unreadmessage}; 
      for (int i = 0; i <9; i++){ 
       list.add(new RowData(username[i],user_image[i],message[i],message_stats[i])); 
      } 
     } 

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

     @Override 
     public Object getItem(int position) { 
      return list.get(position); 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View row = convertView; 
      viewHolder holder = null; 
      if (row==null){ 
       LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       row = inflater.inflate(R.layout.contact_list_style,parent,false); 
       holder = new viewHolder(row); 
      }else{ 
       Toast.makeText(context, "GRRRRRRRRRRR", Toast.LENGTH_SHORT).show(); 
      } 
      RowData temp = list.get(position); 
      holder.user_name.setText(temp.user_name); 
      holder.message_stats.setImageResource(temp.message_status); 
      holder.user_img.setImageResource(temp.user_img); 
      holder.user_message.setText(temp.user_msg); 
      return row; 
     } 
    } 

改變列表視圖的佈局高度後WRAP_CONTENT我收到以下錯誤。(應用程序崩潰)

java.lang.NullPointerException: Attempt to read from field 'android.widget.TextView com.buckydroid.chat.ContactList$viewHolder.user_name' on a null object reference 
+0

android:layout_weight和android:transcriptMode是不是真的需要有一些問題與Java代碼。 –

+0

嘗試更改layout_height以包裝內容或0dp –

+0

嘿,我試着將它更改爲wrap_content,但我得到一個錯誤.. @ShubhamShukla。請檢查更新的問題 – Doge

回答

2

按照我上面的評論,你需要使用setTaggetTag因爲如果else情況下執行,你holdernull,因此例外,所以做這個

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    viewHolder holder = null; 
    if (row==null){ 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = inflater.inflate(R.layout.contact_list_style,parent,false); 
     holder = new viewHolder(row); 
     row.setTag(holder); 
     // ^^^ set the tag 
    }else{ 
     Toast.makeText(context, "GRRRRRRRRRRR", Toast.LENGTH_SHORT).show(); 
     holder=(viewHolder)row.getTag(); 
     // do this , initialize your holder otherwise holder stays null 
    } 
    RowData temp = list.get(position); 
    holder.user_name.setText(temp.user_name); 
    holder.message_stats.setImageResource(temp.message_status); 
    holder.user_img.setImageResource(temp.user_img); 
    holder.user_message.setText(temp.user_msg); 
    return row; 
} 

注意:您可以使用convertView而不是row,不需要創建額外的引用變量。

+0

@Doge很高興我可以幫忙,快樂的編碼:) –

+0

@Doge你可以在每一個地方刪除'row'視圖並使用'convertView'而不是'row','row'只是一個額外的變量, –

2

您需要設置視圖架標籤。

@Override 
      public View getView(int position, View convertView, ViewGroup parent) { 
       View row = convertView; 
       viewHolder holder = null; 
       if (row==null){ 
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        row = inflater.inflate(R.layout.contact_list_style,parent,false); 
        holder = new viewHolder(row); 
        row .setTag(holder); 
       }else{ 
        holder = (Holder) row.getTag(); 
        Toast.makeText(context, "GRRRRRRRRRRR", Toast.LENGTH_SHORT).show(); 
       } 
       RowData temp = list.get(position); 
       holder.user_name.setText(temp.user_name); 
       holder.message_stats.setImageResource(temp.message_status); 
       holder.user_img.setImageResource(temp.user_img); 
       holder.user_message.setText(temp.user_msg); 
       return row; 
      } 
+0

明白了thanx :) – Doge

+0

快樂編碼! –