辣鸡小白记录大作业(废话超多)(私用)2

本文分享了在Android开发中,解决Fragment与Activity交互问题的经验,包括按钮点击事件的正确设置、解决空指针异常的方法,以及如何在Fragment中操作控件等。作者通过实践,总结了一系列有效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一想到要重新做我脑壳就疼(并没有

fragment

https://www.jianshu.com/p/fd71d65f0ec6
https://blog.youkuaiyun.com/weixin_34232744/article/details/91934004
https://blog.youkuaiyun.com/guolin_blog/article/details/8881711
https://www.cnblogs.com/qianguyihao/p/3978989.html

现在有种儿子八个月大然后滑胎了的感觉,头疼

6月9日
新的一天旧的问题,我真的睡觉都梦到别人的APP咋样咋样。

挣扎了一个小时左右我终于开窍了哈哈哈我真是太蠢了,fragment就是fragment和activity没啥子关系,我咋能这么奇怪呢。

我还到处找这个问题怎么可能有嘛
果然早上脑子会好使一些

最近电脑总是蓝屏找dell的人问了一哈可能是软件的问题
刚才又闪退了不过日记没存下来
但是我已经改好了啊哈哈哈没想到我也可以改好空指针!
接下来还要搬三个activity到fragment 是个大工程啊

总结:
1.按钮点击要改成这样

 song_play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });

2.this报错就先改成getActivity()试试
3.要看继承类

把控件的操作都放到fragment类里面了,但为啥还是点不了啊。

也可以在每个fragment只放一个按钮,跳转到activity里面(是个思路,先记下来,虽然是脱裤子放p的事)

我可真是太菜了,那个food界面咋就不好使了呢?咋回事呢?

存一下

package com.example.slhww.win;

import android.app.Activity;
import android.content.Context;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.ExpandableListView;
import android.widget.Toast;

import com.example.slhww.win.R;

import java.util.ArrayList;


public class SportFragment extends Fragment implements View.OnClickListener,
        Chronometer.OnChronometerTickListener{
    public SportFragment() {
        // Required empty public constructor
    }

    public Activity ma1;
    private View layout;

    //分组列表
    private ArrayList<GroupBean> gData = null;
    private ArrayList<ArrayList<SportBean>> iData = null;
    private ArrayList<SportBean> lData = null;
    private Context mContext;
    private ExpandableListView lol_sport_list;
    private MsExpandableListAdapter msAdapter = null;

    //时间计时
    private Chronometer chronometer;
    private Button btn_start,btn_stop,btn_base,btn_format;

    //音乐
    private Button song_play;
    private Button song_pause;
    private Button song_stop;
    private MediaPlayer mPlayer = null;
    private boolean isRelease = true;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        if (layout == null){
            Activity ma = this.getActivity();
            layout = ma.getLayoutInflater().inflate(R.layout.fragment_sport,null);

            bindViews();

            mContext = getActivity();
            lol_sport_list = (ExpandableListView) layout.findViewById(R.id.lol_sport_list);



            gData = new ArrayList<GroupBean>();
            iData = new ArrayList<ArrayList<SportBean>>();
            gData.add(new GroupBean("有氧"));
            gData.add(new GroupBean("无氧"));

            lData = new ArrayList<SportBean>();

            //有氧
            lData.add(new SportBean(R.drawable.sp6,"跑步-500kal/h"));
            lData.add(new SportBean(R.drawable.sp7,"动感单车-406lal/h"));
            lData.add(new SportBean(R.drawable.sp8,"快走-225kal/h"));
            lData.add(new SportBean(R.drawable.sp9,"跳绳-650kal/h"));
            lData.add(new SportBean(R.drawable.sp10,"HITI-369kal/h"));
            iData.add(lData);

            //无氧
            lData = new ArrayList<SportBean>();
            lData.add(new SportBean(R.drawable.sp1, "平板支撑-469kal/h"));
            lData.add(new SportBean(R.drawable.sp2, "卷腹-436kal/h"));
            lData.add(new SportBean(R.drawable.sp3, "俯卧撑-503kal/h"));
            lData.add(new SportBean(R.drawable.sp4, "仰卧起坐-402kal/h"));
            lData.add(new SportBean(R.drawable.sp5, "深蹲-436kal/h"));
            iData.add(lData);

            msAdapter = new MsExpandableListAdapter(gData,iData,mContext);
            lol_sport_list.setAdapter(msAdapter);

            //为列表设置点击事件
            lol_sport_list.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
                @Override
                public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
                    Toast.makeText(mContext, "你点击了:" + iData.get(groupPosition).get(childPosition).getName(), Toast.LENGTH_SHORT).show();
                    return true;
                }
            });


            //时间
            initView();


        }
        return inflater.inflate(R.layout.fragment_sport, container, false);
    }

    private void initView(){
        chronometer = (Chronometer)layout.findViewById(R.id.hh_chr);
        btn_start = (Button) layout.findViewById(R.id.btnStart);
        btn_stop = (Button) layout.findViewById(R.id.btnStop);
        btn_base = (Button) layout.findViewById(R.id.btnReset);
        btn_format = (Button) layout.findViewById(R.id.btn_format);

        chronometer.setOnChronometerTickListener((Chronometer.OnChronometerTickListener) this);
        btn_start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });
        btn_stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });
        btn_base.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });
        btn_format.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });

    }
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btnStart:
                chronometer.start();// 开始计时
                break;
            case R.id.btnStop:
                chronometer.stop();// 停止计时
                break;
            case R.id.btnReset:
                chronometer.setBase(SystemClock.elapsedRealtime());// 复位
                break;
            case R.id.btn_format:
                chronometer.setFormat("Time:%s");// 更改时间显示格式
                break;
        }
        switch (v.getId()){
            case R.id.song_start:
                if(isRelease){
                    mPlayer = MediaPlayer.create(getActivity(),com.example.slhww.win.R.raw.af);
                    isRelease = false;
                }
                mPlayer.start();   //开始播放
                song_play.setEnabled(false);
                song_pause.setEnabled(true);
                btn_stop.setEnabled(true);
                break;
            case R.id.song_pause:
                mPlayer.pause();     //停止播放
                song_play.setEnabled(true);
                song_pause.setEnabled(false);
                song_stop.setEnabled(false);
                break;
            case R.id.song_stop:
                mPlayer.reset();     //重置MediaPlayer
                mPlayer.release();   //释放MediaPlayer
                isRelease = true;
                song_play.setEnabled(true);
                song_pause.setEnabled(false);
                song_stop.setEnabled(false);
                break;
        }
    }

    @Override
    public void onChronometerTick(Chronometer chronometer) {
        String time = chronometer.getText().toString();
        if(time.equals("00:00")){
            Toast.makeText(getActivity(),"时间到了~",Toast.LENGTH_SHORT).show();
        }
    }

    private void bindViews(){
        song_play = (Button) layout.findViewById(R.id.song_start);
        song_pause = (Button) layout.findViewById(R.id.song_pause);
        song_stop = (Button) layout.findViewById(R.id.song_stop);

        song_play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });
        song_pause.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });
        song_stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });
    }

}

两个废了很大功夫改好的代码竟然没用上,害(日记这个可以考虑用上)

package com.example.slhww.win;

import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatDialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

import com.example.slhww.win.Activity4;
import com.example.slhww.win.DBService;
import com.example.slhww.win.Edit_Activity;
import com.example.slhww.win.R;
import com.example.slhww.win.ShowActivity;
import com.example.slhww.win.Values;

import java.util.ArrayList;
import java.util.List;


public class DiaryFragment extends Fragment {
    public DiaryFragment() {
        // Required empty public constructor
    }

    DBService myDb;
    private Button mBtnAdd;
    private ListView lv_note;
    public Activity ma;
    private View layout;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
      // super.onActivityCreated(savedInstanceState);

        if (layout == null) {
            Activity ma = this.getActivity();
            layout = ma.getLayoutInflater().inflate(R.layout.fragment_diary, null);


            // Inflate the layout for this fragment
            // return inflater.inflate(R.layout.fragment_diary, container, false);

            //实例化数据库
            myDb = new DBService(ma);
            init();
        }else {
            View layout = inflater.inflate(R.layout.fragment_diary, container, false);

        }
        return layout;
    }

    public void init(){
        mBtnAdd = layout.findViewById(R.id.btn_add);
        lv_note = layout.findViewById(R.id.lv_note);

        List<Values> valuesList = new ArrayList<>();
        SQLiteDatabase db = myDb.getReadableDatabase();

        Cursor cursor = db.query(DBService.TABLE,null,null,null,
                null,null,null);
        if (cursor.moveToFirst()){
            Values values;
            while (!cursor.isAfterLast()){
                //实例化valuse对象
                values = new Values();

                values.setId(Integer.valueOf(cursor.getString(cursor.getColumnIndex(DBService.ID))));
                values.setTitle(cursor.getString(cursor.getColumnIndex(DBService.TITLE)));
                values.setContent(cursor.getString(cursor.getColumnIndex(DBService.CONTENT)));
                values.setTime(cursor.getString(cursor.getColumnIndex(DBService.TIME)));

                //将values对象存入list对象数组中
                valuesList.add(values);
                cursor.moveToNext();
            }
        }
        cursor.close();
        db.close();

        //设置list组件
        final MyBaseAdapter myBaseAdapter = new MyBaseAdapter(valuesList,getActivity(),R.layout.diary_item);

        //按钮点击事件
        mBtnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(), Edit_Activity.class);
                startActivity(intent);
            }
        });

        //单击查询
        lv_note.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(getActivity(),ShowActivity.class);
                Values values = (Values) lv_note.getItemAtPosition(position);
                intent.putExtra(DBService.TITLE,values.getTitle().trim());
                intent.putExtra(DBService.CONTENT,values.getContent().trim());
                intent.putExtra(DBService.TIME,values.getTime().trim());
                intent.putExtra(DBService.ID,values.getId().toString().trim());
                startActivity(intent);
            }
        });

        //长按删除
        lv_note.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
                final Values values = (Values) lv_note.getItemAtPosition(position);
                new AlertDialog.Builder(getActivity())
                        .setTitle("提示框")
                        .setMessage("是否删除?")
                        .setPositiveButton("yes",
                                new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        SQLiteDatabase db = myDb.getWritableDatabase();
                                        db.delete(DBService.TABLE,DBService.ID+"=?",new String[]{String.valueOf(values.getId())});
                                        db.close();
                                        myBaseAdapter.removeItem(position);
                                        lv_note.post(new Runnable() {
                                            @Override
                                            public void run() {
                                                myBaseAdapter.notifyDataSetChanged();
                                            }
                                        });
                                        //MainActivity.this.onResume();
                                    }
                                })
                        .setNegativeButton("no",null).show();
                return true;
            }
        });
    }
    //创建继承自BaseAdapter的实现类进行ListView的展示
    class MyBaseAdapter extends BaseAdapter {

        private List<Values> valuesList;
        private Context context;
        private int layoutId;

        public MyBaseAdapter(List<Values> valuesList, Context context, int layoutId) {
            this.valuesList = valuesList;
            this.context = context;
            this.layoutId = layoutId;
        }

        @Override
        public int getCount() {
            if (valuesList != null && valuesList.size() > 0)
                return valuesList.size();
            else
                return 0;
        }

        @Override
        public Object getItem(int position) {
            if (valuesList != null && valuesList.size() > 0)
                return valuesList.get(position);
            else
                return null;
        }

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder viewHolder;
            if (convertView == null) {
                convertView = LayoutInflater.from(
                        getActivity().getApplicationContext()).inflate(R.layout.diary_item, parent,
                        false);
                viewHolder = new ViewHolder();
                viewHolder.title = (TextView) convertView.findViewById(R.id.tv_title);
                viewHolder.content = convertView.findViewById(R.id.tv_content);
                viewHolder.time = (TextView) convertView.findViewById(R.id.tv_time);
                convertView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
            }
            String title = valuesList.get(position).getTitle();
            String content = valuesList.get(position).getContent();
            viewHolder.title.setText(title);
            viewHolder.content.setText(content);
            viewHolder.time.setText(valuesList.get(position).getTime());
            return convertView;
        }
        public void removeItem(int position){
            this.valuesList.remove(position);
        }

    }
    class ViewHolder{
        TextView title;
        TextView content;
        TextView time;
    }
}

好了,现在用我不咋聪明的方法解决了从周日到现在的问题。
剩下的问题:

  • food页面显示不出来动态fragment
  • 日记本保存之后回到了home页
  • food的搭配没写呢
  • 每个界面一开始放的东西得找找
  • home现在跳到的是薄荷主页要找找更好的
  • app图标和欢迎界面

6.日晚七点半总结:主要搞好前两个大问题明天去买圣代吃。
考完试吃小龙虾烤肉火锅!!!
新问题:

  • 日记本不
    安卓教我做人系列-少了一行我找了一晚上加一个早上
    是我蠢是我蠢
    10日打卡,现在连到了手机上,打不开网址

12日打卡,在主页加了

  • 音乐换卡路里
  • 首页放表情包
  • 颜色白色(试过了,不好看
  • 日记上面放代办

18号要把实验报告写完!
没错今天就是18号,昨天刚考完两科,明天就要交这个作业辣
然鹅我现在在大改第四个界面啊哈哈哈哈哈我真棒
打算加个刮刮卡在最上面
然后下面是点击按钮出照片

  • 刮刮卡(pass)
  • 按钮及图片
  • HOME页下部(滑胎)
  • 欢迎页整改
  • 实验报告

android studio的预览和模拟器和真机细节上都不一样,绝啦。

结束啦,总之还算可以虽然简单但是完整。
不过展示的时候有点着急,没太说明白,害。
啥时候“类似面试就紧张”的毛病能改改哇

存几个宝藏网站!
博客
简单教程
RUNOOB
W3

下次再见啦Android studio

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值