Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 滚动列表视图项后,视图元素与_Java_Android - Fatal编程技术网

Java 滚动列表视图项后,视图元素与

Java 滚动列表视图项后,视图元素与,java,android,Java,Android,我在android项目中有一个简单的ԼistView。 1.歌曲类型 2.文件夹类型 ListView项模型“SongModel”,有类型字段 歌曲模型 public class SongModel { public String title; public int type; public String getTitle() { return title; } public void setTitle(String title) { this.title = title;

我在android项目中有一个简单的ԼistView。 1.歌曲类型 2.文件夹类型 ListView项模型“SongModel”,有类型字段 歌曲模型

public class SongModel {


public String title;
public int type;

public String getTitle() {
    return title;
}
public void setTitle(String title) {
    this.title = title;
}

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

在ListView项目视图中,我有3个元素:歌曲名称的TextView、歌曲或文件夹照片的ImageView和歌曲播放的ImageButton

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >

<ImageView
    android:id="@+id/song_photo"
    android:layout_width="119dp"
    android:layout_height="match_parent"
    android:src="@drawable/ic_launcher" />



    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />


</LinearLayout>

<ImageButton
    android:id="@+id/add_queue"
    android:layout_width="wrap_content"
    android:layout_height="542dp"
    android:src="@drawable/ic_launcher" />

在适配器类中,我检查,如果items View中的TYPE=1 I绘制歌曲照片。如果TYPE=2 I绘制文件夹照片,我检查ImageButton可见性set View.GONE

package com.example.adapter;
import java.util.ArrayList;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

  public class SongAdapter extends ArrayAdapter<SongModel> {
private ArrayList<SongModel> entries;
private Activity activity;

 static class ViewHolder {

  public ImageButton song_play;
  public TextView song_name;
  public ImageView song_photo;


 }
  public SongAdapter(Activity a, int textViewResourceId,ArrayList<SongModel> entries) {

  super(a, textViewResourceId, entries);
    this.entries = entries;
    this.activity = a;
}


 @Override
  public View getView(int position, View convertView, ViewGroup parent) {
  View rowView = convertView;
  if (rowView == null) {
  LayoutInflater inflater = activity.getLayoutInflater();
  rowView = inflater.inflate(R.layout.list_item, null);
  ViewHolder viewHolder = new ViewHolder();
  viewHolder.song_name = (TextView) rowView.findViewById(R.id.title);
  viewHolder.song_photo = (TextView) rowView.findViewById(R.id.song_photo);
  viewHolder.song_play = (ImageView) rowView .findViewById(R.id.song_play);
  rowView.setTag(viewHolder);
}

ViewHolder holder = (ViewHolder) rowView.getTag();
SongModel song = entries.get(position);

 holder.song_name.setText(song. getTitle());

if (song.getType()==2)
{ 

  holder.song_play.setVisibility(View.Gone);
  holder.song_photo.setImageResource(R.drawable.folder);

}
else
{
     holder.song_photo.setImageResource(R.drawable.song);
}
 rowView.setTag(getItemViewType(position));
 return rowView;
}
  }
package com.example.adapter;
导入java.util.ArrayList;
导入android.app.Activity;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ImageButton;
导入android.widget.ImageView;
导入android.widget.TextView;
公共类SongAdapter扩展了ArrayAdapter{
私有ArrayList条目;
私人活动;
静态类视窗夹{
公共图像按钮宋_播放;
公共文本视图song_名称;
公共图像查看宋ê照片;
}
公共SongAdapter(活动a、int-textViewResourceId、ArrayList条目){
super(a,textViewResourceId,条目);
this.entries=条目;
本活动=a;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行视图=转换视图;
if(rowView==null){
LayoutInflater充气器=活动。getLayoutInflater();
rowView=充气机。充气(R.layout.list_项,空);
ViewHolder ViewHolder=新ViewHolder();
viewHolder.song_name=(TextView)rowView.findViewById(R.id.title);
viewHolder.song_photo=(TextView)rowView.findViewById(R.id.song_photo);
viewHolder.song\u play=(ImageView)rowView.findviewbyd(R.id.song\u play);
rowView.setTag(viewHolder);
}
ViewHolder=(ViewHolder)rowView.getTag();
SongModel宋=条目.get(位置);
holder.song_name.setText(song.getTitle());
if(song.getType()==2)
{ 
holder.song_play.setVisibility(视图已消失);
holder.song_photo.setImageResource(R.drawable.folder);
}
其他的
{
持有者.song_photo.setImageResource(R.drawable.song);
}
setTag(getItemViewType(position));
返回行视图;
}
}
在活动代码中

 package com.example.adapter;

 import java.util.ArrayList;

 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;

 import android.os.Bundle;
  import android.app.Activity;
   import android.view.Menu;
   import android.widget.ListView;

 public class MainActivity extends Activity {
private ArrayList<SongModel> fetch;
private ListView MusicItemlistView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    MusicItemlistView=(ListView)findViewById(R.id.listview);
     fetch = new ArrayList<SongModel>();

    try {
        JSONObject jsonData=new JSONObject(datajson);
    JSONArray dataArray=jsonData.getJSONArray("responseBody");
    SongModel sg;
    JSONObject js;
    for(int i=0;i<dataArray.length();i++)
    {
        sg=new SongModel();
        js=(JSONObject) dataArray.get(i);
        sg.setAlbum(js.getString("artist"));
        sg.setFileName(js.getString("fileName"));
        sg.setType(Integer.parseInt(js.getString("type")));
        sg.setDuration(Integer.parseInt(js.getString("duration")));
        fetch.add(sg);
    }
    MyPerformanceArrayAdapter  adapter = new MyPerformanceArrayAdapter        (this,R.id.listview, fetch);
    MusicItemlistView.setAdapter(adapter);
} catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

 }
package com.example.adapter;
导入java.util.ArrayList;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入android.os.Bundle;
导入android.app.Activity;
导入android.view.Menu;
导入android.widget.ListView;
公共类MainActivity扩展了活动{
私有数组列表获取;
私有列表视图MusicItemlistView;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MusicItemlistView=(ListView)findViewById(R.id.ListView);
fetch=newarraylist();
试一试{
JSONObject jsonData=新的JSONObject(datajson);
JSONArray dataArray=jsonData.getJSONArray(“responseBody”);
SongModel sg;
JSONObject js;

对于(int i=0;i确保将
song_play
的可见性设置为
View.Visible
,当song type不是2时。单元格将被重用,并且某些重用视图的song_play元素不可见

if (song.getType()==2)
{ 

  holder.song_play.setVisibility(View.Gone);
  holder.song_photo.setImageResource(R.drawable.folder);

}
else
{
     holder.song_play.setVisibility(View.Visible); //Add this here.
     holder.song_photo.setImageResource(R.drawable.song);
}
试试这个:

if (song.getType()==2)
{ 

  holder.song_play.setVisibility(View.Gone);
  holder.song_photo.setImageResource(R.drawable.folder);

}
else
{
 holder.song_play.setVisibility(View.VISISBLE);
 holder.song_photo.setImageResource(R.drawable.song);
}

但是这些情况下,song_play photo始终是可见的。我在前面的其他单元格中使用了
View.go
。现在将其更正为View.Visible。您必须明确设置每个单元格中元素的可见性或不可见性。在您的情况下,单元格被重用,song_play元素的可见性在其他单元格中受到控制。vie的重用这里介绍了
列表视图中的ws
,非常感谢您的链接