Android Listview在我第一次进入活动声音时未更新

Android Listview在我第一次进入活动声音时未更新,android,Android,1-主要活动: public class MainActivity extends AppCompatActivity { private List<String> mListItems = Arrays.asList("Hamaki","Amr Diab"); private ArtistsAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState)

1-主要活动:

public class MainActivity extends AppCompatActivity {

    private List<String> mListItems = Arrays.asList("Hamaki","Amr Diab");
    private ArtistsAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView listView = (ListView)findViewById(R.id.Artist_list_view);

        mAdapter = new ArtistsAdapter(this, mListItems);
        listView.setAdapter(mAdapter);

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

                    Intent intent = new Intent(MainActivity.this,SoundActivity.class);
                    intent.putExtra("Artist", mListItems.get(position));
                    startActivity(intent);
                }

        });

    }

}
public class SoundActivity extends AppCompatActivity {


    @Override
    protected void onStart() {
        super.onStart();

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sound);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction().add(R.id.container, new SoundFragment()).commit();
        }

    }
public class SoundFragment extends Fragment {

    static SCTrackAdapter mAdapter;
    static DatabaseReference db;
    static FirebaseHelper helper;
    private TextView mSelectedTrackTitle;
    static ArrayList<Music> mTracks = new ArrayList<>();
    static MediaPlayer mMediaPlayer;
    private ImageView mPlayerControl;
    static String Artist;
    static ListView listView;
    int currentTrack;
    private static String fileName;

    public SoundFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onStart() {
        super.onStart();

        new Fetchtracks().execute();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_sound, container, false);

        Intent intent = getActivity().getIntent();
        if (intent != null) {
            Artist = intent.getStringExtra("Artist");
        }

        listView = (ListView) rootView.findViewById(R.id.track_list_view);
        mAdapter = new SCTrackAdapter(getActivity(), mTracks);
        listView.setAdapter(mAdapter);
        return rootView;
    }
public class SCTrackAdapter extends BaseAdapter {

    private Context mContext;
    private ArrayList<Music> mTracks;

    public SCTrackAdapter(Context context, ArrayList<Music> tracks) {
        mContext = context;
        mTracks = tracks;
    }

    public void update_tracks(ArrayList<Music> list)
    {
        mTracks.clear();
        mTracks.addAll(list);
    }
    @Override
    public int getCount() {
        return mTracks.size();
    }

    @Override
    public Music getItem(int position) {
        return mTracks.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder;
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.track_list_row, parent, false);
            holder = new ViewHolder();
            holder.titleTextView = (TextView) convertView.findViewById(R.id.track_title);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.titleTextView.setText(mTracks.get(position).getName());
        return convertView;
    }

    static class ViewHolder {
        TextView titleTextView;
    }

}
public class Music {

    String name;
    String url;

    public Music() {

    }
    public void setName(String name) {
        this.name = name;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getName() {
        return name;
    }
    public String getURL() {
        return url;
    }
}
3声片段:

public class MainActivity extends AppCompatActivity {

    private List<String> mListItems = Arrays.asList("Hamaki","Amr Diab");
    private ArtistsAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView listView = (ListView)findViewById(R.id.Artist_list_view);

        mAdapter = new ArtistsAdapter(this, mListItems);
        listView.setAdapter(mAdapter);

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

                    Intent intent = new Intent(MainActivity.this,SoundActivity.class);
                    intent.putExtra("Artist", mListItems.get(position));
                    startActivity(intent);
                }

        });

    }

}
public class SoundActivity extends AppCompatActivity {


    @Override
    protected void onStart() {
        super.onStart();

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sound);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction().add(R.id.container, new SoundFragment()).commit();
        }

    }
public class SoundFragment extends Fragment {

    static SCTrackAdapter mAdapter;
    static DatabaseReference db;
    static FirebaseHelper helper;
    private TextView mSelectedTrackTitle;
    static ArrayList<Music> mTracks = new ArrayList<>();
    static MediaPlayer mMediaPlayer;
    private ImageView mPlayerControl;
    static String Artist;
    static ListView listView;
    int currentTrack;
    private static String fileName;

    public SoundFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onStart() {
        super.onStart();

        new Fetchtracks().execute();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_sound, container, false);

        Intent intent = getActivity().getIntent();
        if (intent != null) {
            Artist = intent.getStringExtra("Artist");
        }

        listView = (ListView) rootView.findViewById(R.id.track_list_view);
        mAdapter = new SCTrackAdapter(getActivity(), mTracks);
        listView.setAdapter(mAdapter);
        return rootView;
    }
public class SCTrackAdapter extends BaseAdapter {

    private Context mContext;
    private ArrayList<Music> mTracks;

    public SCTrackAdapter(Context context, ArrayList<Music> tracks) {
        mContext = context;
        mTracks = tracks;
    }

    public void update_tracks(ArrayList<Music> list)
    {
        mTracks.clear();
        mTracks.addAll(list);
    }
    @Override
    public int getCount() {
        return mTracks.size();
    }

    @Override
    public Music getItem(int position) {
        return mTracks.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder;
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.track_list_row, parent, false);
            holder = new ViewHolder();
            holder.titleTextView = (TextView) convertView.findViewById(R.id.track_title);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.titleTextView.setText(mTracks.get(position).getName());
        return convertView;
    }

    static class ViewHolder {
        TextView titleTextView;
    }

}
public class Music {

    String name;
    String url;

    public Music() {

    }
    public void setName(String name) {
        this.name = name;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getName() {
        return name;
    }
    public String getURL() {
        return url;
    }
}
}

7-音乐:

public class MainActivity extends AppCompatActivity {

    private List<String> mListItems = Arrays.asList("Hamaki","Amr Diab");
    private ArtistsAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView listView = (ListView)findViewById(R.id.Artist_list_view);

        mAdapter = new ArtistsAdapter(this, mListItems);
        listView.setAdapter(mAdapter);

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

                    Intent intent = new Intent(MainActivity.this,SoundActivity.class);
                    intent.putExtra("Artist", mListItems.get(position));
                    startActivity(intent);
                }

        });

    }

}
public class SoundActivity extends AppCompatActivity {


    @Override
    protected void onStart() {
        super.onStart();

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sound);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction().add(R.id.container, new SoundFragment()).commit();
        }

    }
public class SoundFragment extends Fragment {

    static SCTrackAdapter mAdapter;
    static DatabaseReference db;
    static FirebaseHelper helper;
    private TextView mSelectedTrackTitle;
    static ArrayList<Music> mTracks = new ArrayList<>();
    static MediaPlayer mMediaPlayer;
    private ImageView mPlayerControl;
    static String Artist;
    static ListView listView;
    int currentTrack;
    private static String fileName;

    public SoundFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onStart() {
        super.onStart();

        new Fetchtracks().execute();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_sound, container, false);

        Intent intent = getActivity().getIntent();
        if (intent != null) {
            Artist = intent.getStringExtra("Artist");
        }

        listView = (ListView) rootView.findViewById(R.id.track_list_view);
        mAdapter = new SCTrackAdapter(getActivity(), mTracks);
        listView.setAdapter(mAdapter);
        return rootView;
    }
public class SCTrackAdapter extends BaseAdapter {

    private Context mContext;
    private ArrayList<Music> mTracks;

    public SCTrackAdapter(Context context, ArrayList<Music> tracks) {
        mContext = context;
        mTracks = tracks;
    }

    public void update_tracks(ArrayList<Music> list)
    {
        mTracks.clear();
        mTracks.addAll(list);
    }
    @Override
    public int getCount() {
        return mTracks.size();
    }

    @Override
    public Music getItem(int position) {
        return mTracks.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder;
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.track_list_row, parent, false);
            holder = new ViewHolder();
            holder.titleTextView = (TextView) convertView.findViewById(R.id.track_title);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.titleTextView.setText(mTracks.get(position).getName());
        return convertView;
    }

    static class ViewHolder {
        TextView titleTextView;
    }

}
public class Music {

    String name;
    String url;

    public Music() {

    }
    public void setName(String name) {
        this.name = name;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getName() {
        return name;
    }
    public String getURL() {
        return url;
    }
}
在doInBackground()中,mTracks为空

返回值为空

doInBackground()
始终返回未修改的mTracks,因此返回空列表!
您需要返回从
helper.retrieve()接收的数据
onPostExecute()
将数据传递给适配器

检查onCreateView()中的mTracks列表大小,您可以在其中将适配器设置为listview


可能您的tracks请求未完成(doInBackground()正在运行),并且片段以空列表显示在屏幕上。

我已在从doInBackground()中检索调用的fetch data方法中对其进行了更新:SoundFragment.mTracks.add(m);我不知道为什么删除了数据,但在我第二次输入时出现了不幸的是,No.mTracks size为0我不知道为什么retrieve返回null.in
db=FirebaseDatabase.getInstance().getReference().child(艺术家)
是从intent收到的字符串吗?我已经更新了这两个类(Fetchtracks,FirebaseHelper),但不起作用。mTracks大小为0,我不知道为什么retrieve返回null。mTracks大小为0,我不知道retrieve返回null的原因。好的,所以在onPostExecute()中设置listview适配器,而不是在onCreateView中。若它对你们有帮助的话,试试看。我试过了,但并没有成功,我认为从数据库获取数据的时间很长。是的,异步任务是不同步的。它使用后台线程执行任务。这就是为什么你无法实现你想要的。因此,只有在获得数据时才更新列表,直到可以显示progressdialog。