【问题标题】:How to change textview item color from another class?如何从另一个类更改文本视图项目颜色?
【发布时间】:2018-07-29 03:20:30
【问题描述】:

我有一个大问题(对我来说) 我在该类的 RecycleViewHolder.class 中有一些来自 api 的项目,我告诉这些项目的 xml 文件在哪里。现在我的问题是因为我在 mainactivity 中有首选项设置,当我将整个应用程序的背景颜色定义为黑色时,我的文本将是在相同的颜色“黑色”中,由于颜色,我在应用程序中看不到任何东西。现在我需要你的帮助如何在 mainactivity 中更改 textview 的颜色,当我尝试在 MainActivity 中创建 findviewbyid 并调用方法 setTextColor 时,我得到 nullpointexception,因为它已经连接到 RecycleViewHolder 类中的 xml。 这是 RecyclceViewHolder 类,其中包含我想从 mainactivity 更改颜色的价格文本视图。

package com.example.domo.cryptotrace;


import android.support.v7.widget.RecyclerView;
import android.widget.TextView;
import android.view.View;


/**
 * Created by Antun on 31.1.2018..
 */
public class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{



    public TextView name, symbol, rank, percentChange1h, percentChange24h, percentChange7d;
    public TextView price;



    public RecyclerViewHolder(View itemView) {
        super(itemView);

        itemView.setOnClickListener(this);
        name = itemView.findViewById(R.id.name);
        symbol= itemView.findViewById(R.id.symbol);
        rank = itemView.findViewById(R.id.
                rank);
        price=itemView.findViewById(R.id.price);

        percentChange1h=itemView.findViewById(R.id.percent_change_1h);
        percentChange24h=itemView.findViewById(R.id.percent_change_24h);
        percentChange7d=itemView.findViewById(R.id.percent_change_7d);


        

    }



    @Override
    public void onClick(View view) {
       
    }



}

这是主要活动(在这堂课中我想改变 RecyclerViewHolder --> itemView--> 价格颜色)

package com.example.domo.cryptotrace;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.View;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Button;

import com.crashlytics.android.Crashlytics;
import java.util.List;
import io.fabric.sdk.android.Fabric;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;



public class MainActivity extends AppCompatActivity {
public Button register;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Fabric.with(this, new Crashlytics());
        final Fabric fabric = new Fabric.Builder(this)
                .kits(new Crashlytics())
                .debuggable(true)
                .build();
        Fabric.with(fabric);
        setContentView(R.layout.activity_main);
        getUserList();

        
        register=findViewById(R.id.register);
        register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, LoginSys.class);
                startActivity(intent);
            }
        });

        

    }




  

    
    @Override
    protected void onResume() {
        super.onResume();
        getPreference();

    }



    //Ovo je klasa koju smo sami gore kreirali kako bi mogli odrediti boje od pozadine kroz Settings
    //Tu još možeš i mjenjati text boju od texViewa sa metodom ||myTextView.setTextColor(0xAARRGGBB);||
    //Ili ovako ||ContextCompat.getColor(context, R.color.your_color);||
    private void getPreference() {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        if (preferences.contains("color")) {
            if (preferences.getString("color", "0").equals("1")) {
                getWindow().getDecorView().setBackgroundColor(Color.WHITE);
            } else if (preferences.getString("color", "0").equals("2")) {
                getWindow().getDecorView().setBackgroundColor(Color.BLACK);
            } else if (preferences.getString("color","0").equals("3")){
                getWindow().getDecorView().setBackgroundColor(Color.RED);
            }else{
                getWindow().getDecorView().setBackgroundColor(Color.MAGENTA);



            }
        }
    }




    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.your_item_id) {
            //A ovo je metoda za pozivanje i startanje preferences activity-a
            Intent intent = new Intent(MainActivity.this, PreferencesScreenActivity.class);
            startActivity(intent);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }


    private void getUserList() {
        try {
            APIService service = ApiClient.getRetrofit().create(APIService.class);
            Call<List<User>> call = service.getUserData();

            call.enqueue(new Callback<List<User>>() {
                @Override
                public void onResponse(Call<List<User>> call, Response<List<User>> response) {
                    //Log.d("onResponse", response.message());

                    List<User> userList = response.body();
                   LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);

                    RecyclerView recyclerView = findViewById(R.id.recycler);
                    recyclerView.setLayoutManager(layoutManager);

                    RecyclerViewAdapter recyclerViewAdapter =
                            new RecyclerViewAdapter(userList);

                    recyclerView.setAdapter(recyclerViewAdapter);


                }

                @Override
                public void onFailure(Call<List<User>> call, Throwable t) {

                }
            });
        }catch (Exception e) {}

    }
}

所以再来一次, 我需要代码来更改 RecyclerViewHolder 类中价格的 textview 项目的颜色。

感谢大家的帮助,每一个好的回答都会得到感谢!

【问题讨论】:

    标签: java android xml colors textview


    【解决方案1】:

    使用颜色作为recyclerview的构造函数:

    int color;
    RecyclerViewAdapter recyclerViewAdapter =
                            new RecyclerViewAdapter(this, userList, color);
    
    //////////////////////////////////////////////////////////////////////////
    
    public class UserAdapter extends RecyclerView.Adapter<UserAdapter.ViewHolder>{
    
    private Context context;
    public static List<UserList> userList;
    private int color;
    
    public UserAdapter(Context context, List<UserList> userList, int color){
        super();
        //Getting all the superheroes
        this.color = color;
        this.userList = userList;
        this.context = context;
    }
     @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.list_layout, parent, false);
    
        ViewHolder viewHolder = new ViewHolder(v);
        return viewHolder;
    }
    
    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {    
     holder.colorText.setText(mColorText.setText);
    //here you will change the text color from mainactivity
       // this change color
        holder.colorText.setTextColor(ContextCompat.getColor(context,color));
    
    }
    
    @Override
    public int getItemCount() {
        return 0;
    }
    
    
    public class ViewHolder extends RecyclerView.ViewHolder {
    
        public TextView colorText;
    
    
        public ViewHolder(View itemView) {
            super(itemView);
            context = itemView.getContext();
    
        }
    
    }
    

    【讨论】:

    • 好像你得到了我,但你能解释一下如何使用它吗?以及在哪里放置代码..
    • 如果我将您的代码放入其中,我如何更改 RecycleViewHolder -- ItemView--Price in mainactivity 的颜色?
    • 我添加了一个编辑。关于查看负责 onBindViewHolder。
    • 伙伴我已经有了那个类,但我仍然无法从其他活动中更改颜色,你看到我的 recycleviewholder 和 mainactivity 代码了吗,我在类用户中有构造函数我添加了颜色 int .. 和我有 recycleviewadapter.class 这里是代码:pastebin.com/zbr6ejJF 我的问题是如何从主要活动改变文本视图的颜色从 RecycleViewHolder -- 想要改变 --> holder.price --> 绿色从 mainactivity 哪里是类 getPreference 或来自 onCreate main班级。谢谢你的帮助。
    【解决方案2】:

    我并没有真正了解您的代码,但我认为您可以在 .xml 文件中创建另一个 TextView,其 id 为“priceColored”之类的。

    当您想要更改价格的颜色时,您只需执行以下操作:

    price = itemView.findViewById(R.id.priceColored); 
    

    id 为 priceColored 的 TextView 将具有您想要使用的颜色。如果你需要弄清楚如何在android中创建一个特定颜色的textview,你可以很容易地在网上找到它。

    希望对你有帮助,

    【讨论】:

    • 这对我没有帮助,因为我想编辑 RecycleViewHolder 价格项目的颜色。如果我写 price=itemView.findViewById(R.id.price);在 MainActivity 我得到错误。所以我需要从 MainActivity 中的 RecycleViewHolder.class 编辑 textview 的颜色。
    【解决方案3】:

    在 RecyclerViewHolder 类中创建一个带有颜色参数的公共方法,并在 mainactivity 中使用该方法与该类对象并调用该公共方法并传递您的颜色代码。

    在 RecyclerViewHolder 中创建以下方法。

        public void changeColor(int color){
        price.setTextColor(color)
    }
    

    并在mainActivity中调用该方法

        RecyclerViewHolderobject.changeColor(Color.BLACK)
    

    【讨论】:

    • 它不起作用,因为我无法将 mainactivity 连接到该方法。我试过 RecycleViewHolder.changeColor.changeColor(Color.BLACK);我从 recycleviewholder 调用方法有什么问题吗?
    猜你喜欢
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 2019-04-20
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多