Adapter条目点击,跳转到新的Activity,获取到值之后回显到adapter 条目中的某个控件中去

博客内容介绍了如何在Adapter条目被点击后,启动新的Activity并传递数据。在新Activity中处理数据后,返回并将结果显示回Adapter的特定控件中,解决了界面交互和数据同步的问题。

//DEMO 示例   (可以直接复制粘贴验证功能--如有bug或者其他问题,欢迎留言),需要butterknife, recyclerview依赖包

package com.ontime.change;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
//显示条目的Activity
public class MainActivity extends AppCompatActivity {
    private MyAdapter adapter;
    private RecyclerView rv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rv = (RecyclerView) findViewById(R.id.rv);
        rv.setLayoutManager(new LinearLayoutManager(this));
        adapter = new MyAdapter(this);
        rv.setAdapter(adapter);
        adapter.notifyDataSetChanged();

        adapter.setItemClickListener(new MyAdapter.MyItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Intent intent = new Intent(MainActivity.this,TwoActivity.class);
                intent.putExtra("位置", position);
                startActivityForResult(intent,200);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Bundle allData = data.getExtras();
        int pos = allData.getInt("位置");
        String price = allData.getString("新价格");

        TextView tv2 = rv.getChildAt(pos).findViewById(R.id.tv2);
        tv2.setText(price);
        adapter.notifyDataSetChanged();
    }
}

//获取需要值的Activity
package com.ontime.change;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;

public class TwoActivity extends AppCompatActivity{

    @InjectView(R.id.oldPrice)
    TextView oldPrice;
    @InjectView(R.id.newPrice)
    EditText newPrice;

    private SharedPreferences sp;
    private String latest;
    private int position;
    private Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two);
        ButterKnife.inject(this);

        sp = getSharedPreferences("价格", MODE_PRIVATE);

        intent = getIntent();
        position = intent.getIntExtra("位置", 0);

        oldPrice.setText(sp.getString("价格" + position, "暂未设置价格"));
    }

    @OnClick({R.id.btn_confirm, R.id.btn_skip})
    public void onViewClicked(View view) {

        switch (view.getId()) {
            case R.id.btn_confirm:
                latest = newPrice.getText().toString().trim();
                if (!TextUtils.isEmpty(latest)) {
                    SharedPreferences.Editor editor = sp.edit();
                    editor.putString("价格" + position, latest);
                    editor.commit();
                    Toast.makeText(this, "新价格" + latest + "更新成功", Toast.LENGTH_SHORT).show();
                    intent.putExtra("新价格", latest);
                    intent.putExtra("位置", position);
                    setResult(RESULT_OK, intent);
                    finish();
                } else {
                    Toast.makeText(this, "价格不可为空", Toast.LENGTH_SHORT).show();
                }
                break;
            case R.id.btn_skip:
                intent.putExtra("旧价格", sp.getString("价格", "暂无标签绑定"));
                intent.putExtra("位置", position);
                setResult(RESULT_OK, intent);
                finish();
                break;
            default:
                break;
        }
    }
}

//适配器Adapter
package com.ontime.change;

import android.content.Context;
import android.content.SharedPreferences;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import static android.content.Context.MODE_PRIVATE;


public class MyAdapter extends RecyclerView.Adapter {

    public MyAdapter(Context context) {
        this.context = context;
    }
    private Context context;
    private MyItemClickListener mItemClickListener;
    private SharedPreferences sp;

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
        ViewHolder viewHolder = new ViewHolder(view,mItemClickListener);
        return viewHolder;
    }

    //绑定数据
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        final ViewHolder viewHolder = (ViewHolder) holder;
        viewHolder.tv1.setText(position + "");
        sp = context.getSharedPreferences("价格", MODE_PRIVATE);
        viewHolder.tv2.setText(sp.getString("价格" + position, "还没有设置价格哟"));
    }

    @Override
    public int getItemCount() {
        return 3;
    }

    static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
        private TextView tv1;
        private TextView tv2;

        private MyItemClickListener mListener;

        ViewHolder(View view, MyItemClickListener myItemClickListener) {
            super(view);
            tv1 = view.findViewById(R.id.tv1);
            tv2 = view.findViewById(R.id.tv2);
            this.mListener = myItemClickListener;
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View view) {
            if (mListener != null) {
                mListener.onItemClick(view, getLayoutPosition());
            }
        }
    }

    public interface MyItemClickListener {
        void onItemClick(View view, int position);
    }

    public void setItemClickListener(MyItemClickListener myItemClickListener) {
        this.mItemClickListener = myItemClickListener;
    }
}

 //activity_main 布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    >

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/rv"
        />
</RelativeLayout>

//activity_two 布局文件
<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <TextView
        android:id="@+id/tv_shake"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp"
        android:text="请进行商品价格绑定绑定"
        android:textColor="@android:color/black"
        android:textSize="20sp"
        />

    <RelativeLayout
        android:id="@+id/rl_container"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tv_shake"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"
        android:gravity="center_vertical"
        >

        <TextView
            android:id="@+id/tv_sentence"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="当前价格:"
            android:textColor="@android:color/black"
            android:textSize="15sp"
            />

        <TextView
            android:id="@+id/oldPrice"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@+id/tv_sentence"
            android:gravity="center_vertical"
            android:textSize="15sp"
            />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/rl_container_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/rl_container"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"
        >

        <TextView
            android:id="@+id/tv_sentence_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:gravity="center_vertical"
            android:text="最新价格:"
            android:textColor="@android:color/black"
            android:textSize="15sp"
            />

        <EditText
            android:id="@+id/newPrice"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:layout_toRightOf="@+id/tv_sentence_1"
            android:gravity="center_vertical"
            android:textSize="15sp"
            />
    </RelativeLayout>


    <Button
        android:id="@+id/btn_confirm"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/rl_container_1"
        android:layout_marginTop="20dp"
        android:gravity="center"
        android:text="绑定 / 更换绑定"
        />

    <Button
        android:id="@+id/btn_skip"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btn_confirm"
        android:layout_marginTop="20dp"
        android:gravity="center"
        android:text="暂时不更改绑定"
        />
</RelativeLayout>

//条目list 布局文件
<?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="wrap_content"
              android:orientation="vertical"
              android:layout_marginTop="20dp"
    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="商品:   "
            android:textSize="25dp"
            />

        <TextView
            android:id="@+id/tv1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="25dp"
            />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="价格:   "
            android:textSize="25dp"
            />

        <TextView
            android:id="@+id/tv2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="25dp"
            />
    </LinearLayout>

</LinearLayout>


### 使用原生JavaScript将变量动态回显到HTML页面 在前端开发中,可以通过多种方式使用原生JavaScript将变量的动态显示到HTML页面上。以下是几种常见的方法: #### 方法一:通过 `innerHTML` 属性设置内容 可以使用 `document.getElementById()` 获取目标元素,并通过其 `innerHTML` 属性来更新该元素的内容。 ```javascript // 假设有一个ID为'display'的<div>标签 let valueToDisplay = "这是要显示的"; // 要显示的变量 document.getElementById('display').innerHTML = valueToDisplay; ``` 这种方法会替换掉指定元素内的所有子节点和文本[^1]。 #### 方法二:通过 `textContent` 设置纯文本内容 如果只需要更新纯文本而不涉及HTML结构的变化,则推荐使用 `textContent` 来代替 `innerHTML`,因为这样更安全也更快捷。 ```javascript let textValue = "仅展示文字"; document.getElementById('textContainer').textContent = textValue; ``` 此方法不会解析任何作为参数传入的字符串中的HTML标记[^1]。 #### 方法三:创建新节点并追加至文档树 对于复杂场景下可能需要动态生成新的DOM节点并将它们附加到现有页面上的情况,可采用这种方式。 ```javascript const container = document.querySelector('#container'); const newParagraph = document.createElement('p'); // 创建<p>元素 newParagraph.textContent = '这是一个新增段落'; container.appendChild(newParagraph); ``` 这里展示了如何构建一个新的段落元素,并将其添加到具有特定ID的选择器所代表的父级容器内。 #### 方法四:结合Ajax请求后的数据处理与回显 当涉及到从服务器端拉取数据后再呈现于客户端界面时,通常会用到异步操作如Axios或者Fetch API完成网络交互之后再做相应的UI刷新动作。 ```javascript fetch('/api/data') .then(response => response.json()) .then(data => { const displayArea = document.getElementById('result'); data.forEach(item => { let para = document.createElement('p'); para.textContent = item.name || '未知名称'; displayArea.appendChild(para); }); }) .catch(err => console.error('Error fetching and displaying:', err)); ``` 上述例子演示了一个简单的GET请求流程以及后续基于接收到的数据对象数组逐一渲染成可视化的列表项过程[^3]。 #### 注意事项 - 在实际项目应用过程中要注意防止XSS攻击等问题的发生,在注入用户输入或远程获取的信息前做好必要的转义工作。 - 如果频繁修改同一个区域的内容考虑性能优化措施比如先收集好全部变更再一次性提交给浏览器重绘减少开销。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值