2017-08-29 49 views
1

我是新来的Java,发现有点晚,我不能从一个以上的类导入ArrayList无法从两个类导入Arraylist ...现在怎么办?

建立它只有一个类(BlackLabel)和CustomAdapter工作正常。现在我想添加第二个品牌(Castle),但我发现我只能导入一个静态。也许你们可以如此善良,并以另一种方式帮助我添加多个品牌来使用相同的适配器。

这里是我的适配器:(刚开始)

import static com.example.android.sab.BlackLabel.modelArrayList; 
//import static com.example.android.sab.CastleLager.modelArrayList; 

/** 
* Created by Carel on 2017/08/15. 
*/ 
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> { 

    private LayoutInflater inflater; 
    private Context ctx; 

    public CustomAdapter(Context ctx) { 
     inflater = LayoutInflater.from(ctx); 
     this.ctx = ctx; 
    } 

    @Override 
    public CustomAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = inflater.inflate(R.layout.rv_item, parent, false); 
     MyViewHolder holder = new MyViewHolder(view); 

     return holder; 
    } 

    @Override 
    public void onBindViewHolder(final CustomAdapter.MyViewHolder holder, int position) { 
     holder.tvBrand.setText((CharSequence) modelArrayList.get(position).getBrand()); 
     holder.tvCases.setText(String.valueOf(modelArrayList.get(position).getNumber())); 
     holder.tvPallet_size.setText(String.valueOf(modelArrayList.get(position).getPallet_size())); 
     holder.tvCases.setText(String.valueOf(modelArrayList.get(position).getNumber2())); 
     holder.tvPallets.setText(String.valueOf(modelArrayList.get(position).getNumber())); 
     holder.tvCases.setText(String.valueOf(modelArrayList.get(position).getNumber2())); 
    } 

这里是BlackLabel中国社会科学院这是第一个:

import java.util.ArrayList; 
//import static com.example.android.sab.CastleLager.modelArrayList; 

public class BlackLabel extends brands { 
    private RecyclerView recyclerView; 
    //private String modelArrayList; 
    //private Context ctx; 
    public static ArrayList<Model> modelArrayList; 
    private CustomAdapter customAdapter; 
    //private Button btnnext; 

    public String[] brandlist = new String[] { 
     "Black Label 340ml NRB (85023)", 
     "Black Label 330ml Cans (85736)", 
     "Black label 500ml Cans (85023)", 
     "Black Label 440ml NRB (86798)", 
     "Black Label 330ml RB (85556)", 
     "Black Label 750ml RB (85021)", 
     "Black Label 340ml NRB 12 Pack (87009)", 
     "Black Label 500ml Cans 12 Pack (85022)" 
    }; 

    public int[] pallet_size = {84, 127, 81, 80, 120, 70, 132, 90}; 
    //int palletsize = Integer.parseInt(String.valueOf(pallet_size)); 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.order_by_brand); 
     setTitle("Black Label"); 
     recyclerView = (RecyclerView) findViewById(R.id.recycler); 
     //btnnext = (Button) findViewById(R.id.next); 
     modelArrayList = getModel(); 
     customAdapter = new CustomAdapter(this); 
     recyclerView.setAdapter(customAdapter); 
     recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false)); 
    } 

    private ArrayList<Model> getModel() { 
     ArrayList<Model> list = new ArrayList<>(); 
     for (int i = 0; i < 8; i++) { 
     Model model = new Model(); 
     model.setNumber(0); 
     model.setNumber2(0); 
     model.setBrand(brandlist[i]); 
     model.setPallet_size(pallet_size[i]); 
     list.add(model); 
     } 
     return list; 
    } 
} 

,现在我想用一个ArrayList从第二等级:

public class CastleLager extends brands { 

    private RecyclerView recyclerView; 
    //private String modelArrayList; 
    //private Context ctx; 
    public static ArrayList<Model> modelArrayList; 
    private CustomAdapter customAdapter; 
    //private Button btnnext; 
    public String[] castlebrandlist = new String[] { 
     "Castle Lager 340ml NRB (85023)", 
     "Castle Lager 330ml Cans (85736)", 
     "Castle Lager 500ml Cans (85023)", 
     "Castle Lager 440ml NRB (86798)", 
     "Castle Lager 330ml RB (85556)", 
     "Castle Lager 750ml RB (85021)", 
     "Castle Lager 340ml NRB 12 Pack (87009)", 
     "Castle Lager 500ml Cans 12 Pack (85022)" 
    }; 
} 

我知道它可能是非常基本的,但正如我所说,我是非常新的Java和不能等我的头在哪里开始。谢谢。

+0

您只能导入一个,而您必须为另一个导入完全限定的名称,例如'holder.tvBrand.setText((CharSequence)com.example.android.sab.CastleLager.modelArrayList.get(position).getBrand());' –

+0

或者只是导入类,并使用'Class.field'语法EG: 'CastleLager.modelArrayList' ... –

+0

谈论命名:阅读Java命名约定。类名始终以大写字母开头。所以'延伸品牌'听起来也是错误的。 – GhostCat

回答

3

解决方法很简单:避免“相对”名称。

含义:当你有X.Y.Z和x2.y2.Z,那么就不要使用名称Z你的源代码中,而是完全限定名x.y.Zx2.y2.Z

是的,这有时是不方便的,但这是你在这里唯一的选择。其他语言,比如python,可以让你“重命名”导入的东西,但Java不会。当两个类具有相同名称时,避免名称冲突的唯一选择是切换到完全限定名称。

而只是要确定:在代码中真正问题是,你要允许“读/写”访问在不同的地方一类的的事实。你看 - 字段代表你的类的内部状态。您努力从外部世界获得这样的信息隐藏 - 因为这是一个外部没有人应该关心或了解的实现细节。

所以这里真正的答案是退一步,考虑一个更强大的设计,它是基于向外界展示一个领域的而不是

+0

GhostCat我认为你是对的。我可能不得不退后几步。正如我所说我是新来的Java和它有点做了所有这些工作下降,然后只有现实主义,你必须重新开始。不管怎样,谢谢你。 –